刚开始学习as3的时候,尤其是对于一个从as2转型到as3的人来说,可能最先遇到的一个问题就是,sprite是个什么东西呢?原来你会发现,原来sprite就是一个轻量型的clip,它没有时间轴的概念,在开发项目的时候,如果用不到时间轴的话,我们尽量用Sprite而不用MovieClip,可以提高程序的执行效率。但是今天我又有了一个新发现,不说了,先卖个关子,嘿嘿!先给大家讲讲我是怎么遇到问题的。
在有些程序中,我们需要动态生成一个列表,列表中的每一个项(Item)包含有若干种属性,当点击某个项的时候,我们需要将这些属性推送出去。最初我就是用Sprite生成了一个列表,但是加属性的时候提示无法访问未定义属性。如下:
- var ball:Sprite = new Sprite();
- ball.act = 1;
- addChild(ball);
- trace(ball.act);//这里就会报错
在用as2开发项目的时候,这种情况是不会出现的,这里当时憋了我好一阵子,后来想了想,只能先建一个子类继承Sprite,然后在子类中添加属性,这样在建立影片的时候,直接生成这个子类的实例。这个过程很简单,但是毕竟多了一个步骤, 感觉很不爽。有一次我在场景中绘制了一个图形,直接添加了属性,居然能够正常输出,开始以为是继承了我的那个子类的缘故,检查了一遍发现不是。我突然心声一念,场景中的图形不就是MovieClip么,那我在程序中生成一个MovieClip的话,理论上应该也是没问题的(之前一直没有注意过这个问题),于是我赶紧测试,验证一下想法,果然不出所料。以后在做项目的时候,什么时候该用Sprite,心里就更有数了,有效的运用他们的特性可以事半功倍的。
MovieClip 是 dynamic类,而Sprite不是。因此Sprite无法添加任何动态属性,而MovieClip可以。
其中在“类”的位置,MovieClip 注明为 public dynamic class MovieClip
Sprite 注明为 public class Sprite