当前位置: 代码迷 >> Web前端 >> DisplayObject种与矢量图、位图
  详细解决方案

DisplayObject种与矢量图、位图

热度:164   发布时间:2012-10-29 10:03:53.0
DisplayObject类与矢量图、位图
类归于: ActionScript3

21.1.1 显示对象的可视属性列表
AS3中所有原有对象的属性前面的下划线都去掉了,直接使用字母 ,比如 _x _y _alpha 之类变成x y alpha
注意的是:
scaleX scaleY alpha 之类原来0-100的值,在AS3中变成了0-1,其中的百分比使用小数
显示对象基本有11个可视属性(共有25个):
x、y、width、height、scaleX、scaleY、mouseX、mouseY、rotation、alpha、visible

21.1.2 显示对象的其它属性
显示对象除了11个可视属性外,还有5个常用属性和9个不太常用的属性。
除此之外,DisplayObject还拥有6个实例方法,能发出6种事件。

5个常用属性:
name:   显示对象名字,与AS2不同的是,创建对象时,name会自动分配
parent: 父容器,指向显示列表的父容器,当显示对象不在显示列表中时,该属性为null
root:   返回当前SWF主类的实例引用。
stage: 舞台
mask:   遮罩,指向用来遮罩的对象。

21.2 所有显示对象的抽象父类:DisplayObject类
DisplayObject类是一个不能被实例化的抽象类,也不能创建直接继承DisplayObject的子类,而只能继承自DisplayObject具体子类
DisplayObject类具有7个子类,分成两类,一类是InteractiveObject抽象类,
另一类是非InteractiveObject类的六个具体类,这六个类都是直接继承自DisplayObject类,不是InteractiveObject的子类,
因此不能接受鼠标事件,也不会发出人机交互事件。

21.3 矢量图
Shape类是最简单的DisplayObject类型,与父类不同的是它多了一个graphics的实例属性,这个属性持有Graphics类对象的引用。

21.3.1 Graphics对象
Graphics对象只能由AS3内建的显示对象创建并调用,所有的矢量图形代码绘制均使用它创建。
Graphics对象并不是显示对象类,而是直接继承自根类Object。也没法用代码创建Graphics对象。
Graphics对象绘制方法分类(详细见P341 或帮助 flash.display > Graphics 相关方法 属性)

使用代码绘图时,一般遵从顺序:设置线头样式、填色、移动绘画点、画线或绘制图形、结束填色(endFill())。
设置线头样式、填色都是可选的。

只要含有Graphics的显示对象都可以绘制矢量图。
AS3中拥有Graphics对象的DisplayObject子类有3个:Shape、Sprite、MovieClip,Shape只支持纯矢量图,Sprite可以容纳矢量图与其它对象。

21.3.2 绘制矢量图的例子
var 显示对象:Shape = new Shape();
显示对象.graphics.beginFill(0xff0000);
显示对象.graphics.drawCircle(100,100,40);
显示对象.graphics.endFill();
addChild(显示对象);


21.4 位图
21.4.2 Bitmap和BitmapData
位图的所有像素信息存储在Bitmap对象的BitmapData属性持有的BitmapData对象中,
Bitmap对象不是显示对象,它直接继承自Object
BitmapData对象可以看成是一个特殊数组(二维数组),其中存储的每个一个颜色值,是一个32位的ARGB值
A,alpha透明度, 值从0×00-0xFF , ARGB组合的值就是 0xFF00000 共8位16进制值。

BitmapData对象记录的像素ARGB值是直接提交Flash Player渲染的,所以直接改变BitmapData中的像素信息,就可以改变舞台上的位图对象。

21.4.3 使用BitmapData 创建和改变位图
import flash.display.BitmapData;
import flash.display.Bitmap;

21.5 遮罩
21.5.1 定义普通遮罩
设置显示对象的mask属性,即可定义遮罩。
显示对象.mask = 遮罩对象; //设置遮罩
显示对象.mask = null; //撤消遮罩

遮罩对象不需要一定在显示列表中的对象,但如果需要实现遮罩跟随场景缩放,用户调整大小等操作,必须要在显示列表中。

21.5.2 定义Alpha通道遮罩
要使用Alpha通道遮罩,遮罩和被遮罩的对象都需要使用位图缓存。
另外,遮罩对象需要具有Alpha透明通道渐变的信息才可以。
使用滤镜或者Graphics对象的渐变填充方法都可以创建具有Alpha透明通道渐变的信息的图形。

设置显示对象使用位图缓存:
显示对象.cacheAsBitmap = true;

21.6 文本
与文本相关的所有类在flash.text.*包中,动态文本框由TextField类实现。
创建文本框只需要 new一个TextField类的实例即可
使用type来决定文本框是属于动态还是输入,
type=TextFieldType.DYNAMIC
输入文本框
type=TextFieldType.INPUT

21.6.2 捕获HTML文本超链接的信息
HTML文本框中的超链接<a href 必须以event:开头,将超链接要发送的信息放置在它的后面。
当单击链接时,会发出一个事件,是flash.events.TextEvent类的实例,事件类型是TextEvent.LINK
<a href=’event:geturl|网址|窗口方式’>链接</a>
文本框.addEventListener(TextEvent.LINK,侦听函数)

24.6.3 在文本框中追加文本请使用高效率的 appendText()
在AS3中使用appendText替代原来的+=添加字符串
文本框.appendText("追加的字串")
文本的规模越大,appendText的效率优势越明显。

21.7 碰撞检测
hitTestObject(obj:DisplayObject):Boolean 检测是否与某个显示对象(obj)碰撞。
hitTestPoint(x:Number,y:Number,shapeFlag:Boolean=false):Boolean
检测是否和某个舞台坐标点发生碰撞,其中shapeFlag定义的是检查显示对象的实际像素(true),
还是检查显示对象的边框(false).

21.8 自定义显示对象类
创建的自定义显示对象类,必须继承自DisplayObject的具体子类。
所谓子类,即排除DisplayObject、InteractiveObject、DisplayObjectContainer 三个抽象类,
这三个类都没提供在屏幕上渲染自身的API,因为自定义显示对象必须要继承自这三类的具体子类。
根据需求考虑继承Shape、Bitmap、Video中的某个类。在实际编程中,以继承Shape最为常见。
  相关解决方案