AS3.0中的显示编程(二)-- DisplayObject类
2010-10-08 10:38
148 查看
写在前面的话:按照惯例,我只是对该类其中的一些属性和方法做讲解说明,并不会涵盖所有内容。如果想深入了解的,请参看相应的帮助文档。下同!
(1) alpha和_alpha
在AS2.0中,是用以下划线开头的变量名来标识相应的属性。如_width、_height、_visible、_alpha等。
在AS3.0中,该类变量名已经取消,不再沿用下划线。
这个也是AS3.0和AS2.0相比,一个蛮大的变化,大家要多留意。
(2) width、height、scaleX、scaleY
width和height分别对应显示对象的宽度和高度。
scaleX和scaleY分别对应AS2.0的_xscale和_yscale属性。(注意字母前后顺序不一样了)
当width和height属性值发生变化时,相应的scaleX和scaleY值也会发生变化,反之相同。
如果我们需要一个同比例的变形,通常用下面的代码:
假设我们在舞台上绘制了一个高为80,宽为120的长方形,然后用this.getChildAt(0)访问。代码如下:
this.getChildAt(0).width = 150; //将宽度修改为150
this.getChildAt(0).scaleY = stage.getChildAt(0).scaleX //等比例缩放
(3) mask
mask属性对应AS2.0的setMask()方法。虽然在AS3.0中,做为遮罩的显示对象可以不用放入显示列表,但是在功能上会有较多限制。所以我还是建议大家养成先放入显示列表,然后再使用的习惯,以免发生难以排查的错误。
下面的几个方法其实是AS2.0和AS3.0共通的,只是在表现形式上,可能略有区别:
1. 删除遮罩的方法
在AS2.0中,我们用setMask(null)的方法手动删除遮罩;对应AS3.0中,将mask属性设置为null,同样可以实现删除遮罩的目的。
2.设备字体的遮罩
假如被遮罩的对象是一个TextFiled对象,那么遮罩的形状只能是一个矩形框,即使你设置了一个圆形作为遮罩,也会自动转化为矩形框。
如果你一定要实现特殊形状的遮罩效果,需要用StaticText(静态文本)来实现。
3.Alpha通道遮罩
如果遮罩和被遮罩的显示对象都设置了位图缓存(cacheAsBitmap = true),那么就可以使用透明遮罩。通俗的说,就是对遮罩应用一个透镜,然后效果体现在被遮罩的显示对象上。我抄袭个官方的例子吧,大家可以直接复制代码,自己懒得写了。
// 加载图像
var loader:Loader = new Loader();
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/
images/image1.jpg");
loader.load(url);
this.addChild(loader);
// 创建 Sprite并绘制渐变椭圆
var oval:Sprite = new Sprite();
var colors:Array = [0x000000, 0x000000];
var alphas:Array = [1, 0];
var ratios:Array = [0, 255];
var matrix:Matrix = new Matrix();
matrix.createGradientBox(200, 100, 0, -100, -50);
oval.graphics.beginGradientFill(GradientType.RADIAL,
colors,
alphas,
ratios,
matrix);
oval.graphics.drawEllipse(-100, -50, 200, 100);
oval.graphics.endFill();
this.addChild(oval);
// 对于两个显示对象都设置 cacheAsBitmap = true。
loader.cacheAsBitmap = true;
oval.cacheAsBitmap = true;
// 将椭圆设置为加载器的遮罩
loader.mask = oval;
// 使椭圆可拖动。
oval.startDrag(true);
运行下,看看效果吧,呵呵。
(4) root、stage、this
AS3.0里的root变化还是非常大的,大到什么程度呢,呃,我用例子来说明吧。
AS3.0里,创建一个文档后,首先就存在一个基础显示容器stage,然后在stage下有了第一个显示对象,就是root,我们可以用下面代码验证:
trace(stage.numChildren); //返回:1
trace(stage.getChildAt(0) == root); //返回:true
trace(root.parent == stage); //返回:true
此时的root,和this是等值的,我们可以用下面代码验证:
trace(root == this); //返回:true
然后我们在舞台上手动绘制3个MC,分别实例名为t1、t2、t3,然后用以下几种方式访问:
trace(root.numChildren); //出错
trace(root.t1); //出错
trace(this.numChildren); //正确:返回3
trace(this.t1); //正确
trace(this.getChildAt(0).name); //正确:返回t1
所以这个也是我比较迷惑的一个地方,虽然root和this是等值的,但是并不能直接用root进行访问了。
最后,我们在试验下面几行代码:
trace(t1.root == this); //返回:true
trace(t1.parent == this); //返回:true
trace(t1.root.numChildren); //出错
trace(t1.parent.numChildren); //正确,返回3
这几处地方为什么会报错,root和this在哪里存在不同,这个我暂时还没有弄明白,如果哪位朋友清楚,敬请指正。
(5) hitTestObject()、hitTestPoint()
我们做Flash游戏的时候,比如判断格斗动作,或者飞行射击等,经常需要判断两个物体之间是否有相交,那就需要用到上面的两个方法。
前者是判断两个物体之间是否有相交,后者是判断物体与某个坐标点是否有相交。
(1) alpha和_alpha
在AS2.0中,是用以下划线开头的变量名来标识相应的属性。如_width、_height、_visible、_alpha等。
在AS3.0中,该类变量名已经取消,不再沿用下划线。
这个也是AS3.0和AS2.0相比,一个蛮大的变化,大家要多留意。
(2) width、height、scaleX、scaleY
width和height分别对应显示对象的宽度和高度。
scaleX和scaleY分别对应AS2.0的_xscale和_yscale属性。(注意字母前后顺序不一样了)
当width和height属性值发生变化时,相应的scaleX和scaleY值也会发生变化,反之相同。
如果我们需要一个同比例的变形,通常用下面的代码:
假设我们在舞台上绘制了一个高为80,宽为120的长方形,然后用this.getChildAt(0)访问。代码如下:
this.getChildAt(0).width = 150; //将宽度修改为150
this.getChildAt(0).scaleY = stage.getChildAt(0).scaleX //等比例缩放
(3) mask
mask属性对应AS2.0的setMask()方法。虽然在AS3.0中,做为遮罩的显示对象可以不用放入显示列表,但是在功能上会有较多限制。所以我还是建议大家养成先放入显示列表,然后再使用的习惯,以免发生难以排查的错误。
下面的几个方法其实是AS2.0和AS3.0共通的,只是在表现形式上,可能略有区别:
1. 删除遮罩的方法
在AS2.0中,我们用setMask(null)的方法手动删除遮罩;对应AS3.0中,将mask属性设置为null,同样可以实现删除遮罩的目的。
2.设备字体的遮罩
假如被遮罩的对象是一个TextFiled对象,那么遮罩的形状只能是一个矩形框,即使你设置了一个圆形作为遮罩,也会自动转化为矩形框。
如果你一定要实现特殊形状的遮罩效果,需要用StaticText(静态文本)来实现。
3.Alpha通道遮罩
如果遮罩和被遮罩的显示对象都设置了位图缓存(cacheAsBitmap = true),那么就可以使用透明遮罩。通俗的说,就是对遮罩应用一个透镜,然后效果体现在被遮罩的显示对象上。我抄袭个官方的例子吧,大家可以直接复制代码,自己懒得写了。
// 加载图像
var loader:Loader = new Loader();
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/
images/image1.jpg");
loader.load(url);
this.addChild(loader);
// 创建 Sprite并绘制渐变椭圆
var oval:Sprite = new Sprite();
var colors:Array = [0x000000, 0x000000];
var alphas:Array = [1, 0];
var ratios:Array = [0, 255];
var matrix:Matrix = new Matrix();
matrix.createGradientBox(200, 100, 0, -100, -50);
oval.graphics.beginGradientFill(GradientType.RADIAL,
colors,
alphas,
ratios,
matrix);
oval.graphics.drawEllipse(-100, -50, 200, 100);
oval.graphics.endFill();
this.addChild(oval);
// 对于两个显示对象都设置 cacheAsBitmap = true。
loader.cacheAsBitmap = true;
oval.cacheAsBitmap = true;
// 将椭圆设置为加载器的遮罩
loader.mask = oval;
// 使椭圆可拖动。
oval.startDrag(true);
运行下,看看效果吧,呵呵。
(4) root、stage、this
AS3.0里的root变化还是非常大的,大到什么程度呢,呃,我用例子来说明吧。
AS3.0里,创建一个文档后,首先就存在一个基础显示容器stage,然后在stage下有了第一个显示对象,就是root,我们可以用下面代码验证:
trace(stage.numChildren); //返回:1
trace(stage.getChildAt(0) == root); //返回:true
trace(root.parent == stage); //返回:true
此时的root,和this是等值的,我们可以用下面代码验证:
trace(root == this); //返回:true
然后我们在舞台上手动绘制3个MC,分别实例名为t1、t2、t3,然后用以下几种方式访问:
trace(root.numChildren); //出错
trace(root.t1); //出错
trace(this.numChildren); //正确:返回3
trace(this.t1); //正确
trace(this.getChildAt(0).name); //正确:返回t1
所以这个也是我比较迷惑的一个地方,虽然root和this是等值的,但是并不能直接用root进行访问了。
最后,我们在试验下面几行代码:
trace(t1.root == this); //返回:true
trace(t1.parent == this); //返回:true
trace(t1.root.numChildren); //出错
trace(t1.parent.numChildren); //正确,返回3
这几处地方为什么会报错,root和this在哪里存在不同,这个我暂时还没有弄明白,如果哪位朋友清楚,敬请指正。
(5) hitTestObject()、hitTestPoint()
我们做Flash游戏的时候,比如判断格斗动作,或者飞行射击等,经常需要判断两个物体之间是否有相交,那就需要用到上面的两个方法。
前者是判断两个物体之间是否有相交,后者是判断物体与某个坐标点是否有相交。
相关文章推荐
- AS3.0中的显示编程(末篇)-- 滤镜(下)
- AS3.0中的显示编程(六)-- 几何结构
- AS3.0中的显示编程(一) -- 显示编程的基础知识 推荐
- AS3.0中的显示编程(三)-- 缓存显示对象
- AS3.0中的显示编程(四)-- DisplayObjectContainer
- AS3.0中的显示编程(七)-- 滤镜(上)
- [轉]AS3.0编程 显示对象简介
- AS3.0中的显示编程(五)-- Loader(加载器) 推荐
- AS3.0中的显示编程(八)-- 滤镜(中) 推荐
- java网络编程客户端输入字符串,服务器端将其反转后输出给客户端,客户端显示出来
- 单片机编程:让led数码管显示数字0到9
- Qt下的OpenGL 编程(7)顶点数组和显示列表
- shell初级编程问题(一):fi关键字显示红色,运行报语法错误
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
- Windows界面编程第八篇 listbox彩色显示隔行变色
- Windows界面编程第八篇 listbox彩色显示隔行变色
- VS2010/MFC编程入门之十四(对话框:一般属性页对话框的创建及显示)
- Windows编程基础 - 文本显示
- 保存网页文件而不显示对话框 - [编程]
- 按字母序的升序显示单词《梁勇2011java语言程序设计基础篇》22章java集合框架编程练习题22.5