AS3.0中的显示编程(二)-- DisplayObject类

     写在前面的话:按照惯例,我只是对该类其中的一些属性和方法做讲解说明,并不会涵盖所有内容。如果想深入了解的,请参看相应的帮助文档。下同!

      (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游戏的时候,比如判断格斗动作,或者飞行射击等,经常需要判断两个物体之间是否有相交,那就需要用到上面的两个方法。

      前者是判断两个物体之间是否有相交,后者是判断物体与某个坐标点是否有相交。










本文转自 windtoto 51CTO博客,原文链接:http://blog.51cto.com/windtoto/402126,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值