后边,一个一个过程的将这个功能描述出来。当做自己的一次学习和记录吧!
人物渲染:Char.as
显示对象类(DisplayObject,所有显示对象的抽象父类,其构造函数不能不调用,从而不可以被实例化。我们只能实例化它的子类,操作它子类的对象。所以,在编程中,DisplayObject更多的是作为一种数据类型来使用的).
显示对象的可视属性列表:
横坐标: x
纵坐标: y
宽度: width
高度: height
横向缩放比列: scaleX
纵向缩放比列: scaleY
鼠标相对横坐标:mouseX
鼠标相对纵坐标:mouseY
顺时针旋转角度:rotation
透明度:alpha
可见性:visible
(他们都由getter,setter实现,只读属性只提供getter)
显示对象常用的非可视属性列表:
显示对象名字:name
父容器:parent
根对象:root
舞台:stage
遮罩:mask
显示对象9个不太常用到的属性: loaderInfo,cacheAsBitmap,filters,scale9Grid,blendMode,accessibilityProperties,opaqueBackground,scrollRect,transform
(一共25个)
flash里边的图分矢量图和位图。可以用flash cs5.5 来绘制矢量图,也可以用Graphics类。Graphics类并不是显示对象类,而是直接继承Object。我们也无法用代码创建Graphics对象,没有办法调用他的构造函数。Graphics对象只能由as3内建的折现显示对象创建并调用。如MovieClip,Sprite,Shape,或子类。Shape类直接继承DisplayObject,但不是容器。那什么时候用位图渲染,什么时候用矢量渲染呢。用d5他们总结的说吧:
图形简单,同屏数量不多,渐变色少,移动设备(GPU支持),适用矢量渲染。如果图形复杂,同屏数量多,颜色负载,适用位图渲染。最新的flashplayer已针对位图进行过优化,直接移动bitmap比自己编写copyPixel效率高。矢量渲染占用大量内存,而如果是相同的数据,无论对象有多少个,位图渲染基本不会增加内存。针对自己的游戏项目,选择一款适合自己的渲染方法,才是正确的做法。不过,大家都知道,矢量图是无论你怎么放大,都不会失效。我们经常会用到AI格式的素材。这个是直接可以导入flash cs5.5.而如果是位图,放大后,会出现马赛克现象。
矢量图形的渲染优化:如果是Movclip,mouseEnabled和 cacheAsBitmap设置成false吧。关闭对鼠标和bitmap缓存。
Bitmap,位图对象类。位图内的所有信息存储在 Bitmap对象的bitmapData属性持有的BitmapData对象中。BitmapData对象并不是显示对象,而是直接继承自Object。
BitmapData 位图数据源
flash 中的颜色值的变现形式,有三字节(24位)和四字节(32位),分别表示无透明度的RGB颜色和喊透明度的ARGP颜色。(eg:0xff ff ff, 0xff ff ff ff).
BitmapData必须有个宽和高(宽高不能为零),但宽高均不能超过8,191像素,宽高的乘积不能超过16,777,215.
创建BitmapData: var bitmapData:BitmapData=new BitmapData(_width,_height,Transparent,fillcolor)
这四个值分别表示:位图数据对象的宽度,位图数据对象的高度,位图数据对象是否包含alpha通道,位图数据对象的填充颜色。其中,前两个参数是必须的。单位为像素。参数Transparent的默认值是true,即位图对象数据支持alpha通道(透明)。当设置成falsh时,就不支持了。fillcolor参数的值为8位16进制数字的颜色值,其默认值是0xffffffff。当Transparent的值为true时,颜色值的前两位表示颜色的透明度。否则,颜色值的前两位不起作用。
位图数据源,想要把它显示到舞台上。有两种方法。一种是作为位图填充,如:
var bdData=new BdData();// 类型是BitmapData
var sp:Sprite=new Sprite();
sp.graphics.beginBitmapFill(bdData);
sp.graphics.drawRect(0,0,100,100);
addChild(sp);
一种是把他给Bitmap的bitmapData属性,如:
var bdData=new BdData();// 类型是BitmapData
var bitmap:Bitmap=new Bitmap();
bitmap.bitmapData=bitmap;
addChild(bitmap);
很多时候,都在考虑位图渲染的效率问题和占用资源的问题。位图复制处理。