子类化显示对象
前面已经讲过生成 Sprite 或 MovieClip 类的子类,对某个类进行子类化是非常有用的。首先,大家可能对 AS 3 取消 attachMovieClip 功能感到十分惊呀,如果这样的话,我们怎么才能在 Flash CS3 IDE 库中取出影片剪辑元件放入舞台呢?答案是,使用一个继承自 MovieClip 或 Sprite 的类。为了能够好地解释这个问题,简单地介绍一下 IDE:
- 创建一个新的 FLA 文件,并在舞台上绘制一些图形。
- 选中图形按下 F8 键转换为元件。
- 在转换为元件窗口中输入一个名称,并设置为影片剪辑类型。
- 选择为 ActionScript 导出。
在以前的 Flash 版本中,可以自由地给出标识符或输入一个类名。而在 Flash CS3 中,标识符一栏不可用了,类一栏会自动地填入默认值。这里还多出了基类一栏,默认为 flash.display.MovieClip,这里也可以填入继承自 MovieClip 或 Sprite 的自定义类。
随意输入一个类名,不必担心没有这个类,然后点击确定。这个地方很有趣,Flash 找不到这个类,它就会自动生成一个类,并对其进行编译。并不是说 Flash 会创建一个 ActionScript 类文件,但它会在 SWF 中,生成一串字节代码表示一个继承自 Sprite 或 MovieClip 的类。除了继承了基类,它什么都不会做,但它已经与库中的元件连接上了。比如,你的类名为 Ball。在文档类或时间轴上,可以这么写:
var ball:Ball = new Ball(); addChild(ball);
这样就在舞台上创建了一个库中的元件,就像 AS 2 的 attachMovie 方法一样。我们要是能给出自定义的真正的类名及路径的话,那么就可以让元件附加很多功能。现在,我们跳出 Flash IDE 回到类的世界,看下一个示例。下面再看一个重定父级的示例,这里有一些重复的部分可以写入另一个类中。看一下示例,假设已经创建了一个名为 parent1 的 Sprite 实例,要里面绘制正方形:
parent1.graphics.lineStyle(1, 0); parent1.graphics.drawRect(-50, -50, 100, 100);
下面再创建一个名为 parent2 的 Sprite 实例,同样也是绘制一个正方形。当然这个例子毫无意义,但它可以告诉我们 Sprite 的子类是多么的有用。首先,我们建立一个名为 ParentBox 的类,并继承自 Sprite,这样一来,就拥有了绘制正方形的代码:
package { import flash.display.Sprite; public class ParentBox extends Sprite { public function ParentBox() { init(); } private function init():void { graphics.lineStyle(1, 0); graphics.drawRect(-50, -50, 100, 100); } } }
然后,使用这个类创建两个 ParentBox,这样做比创建两个 Sprite 对象要好得多。
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Reparenting2 extends Sprite { private var parent1:ParentBox; private var parent2:ParentBox; private var ball:Sprite; public function Reparenting2() { init(); } private function init():void { parent1 = new ParentBox(); addChild(parent1); parent1.x = 60; parent1.y = 60; parent2 = new ParentBox(); addChild(parent2); parent2.x = 170; parent2.y = 60; ball = new Sprite(); parent1.addChild(ball); ball.graphics.beginFill(0xff0000); ball.graphics.drawCircle(0, 0, 40); ball.graphics.endFill(); ball.addEventListener(MouseEvent.CLICK, onBallClick); } public function onBallClick(event:MouseEvent):void { parent2.addChild(ball); } } }
作为 ParentBox 的实例,它们仍是 Sprite ,因此还可以再增加子影片, init 方法直接进行绘图。虽然这个示例价值不大,但可以让你学会这种思想,往后,会在书中看到更多更复杂的示例。你也许想自己动手创建一个球(Ball)类,用于绘制小球,虽然这么做不会减少代码里,但是当你的类变得十分复杂时,把功能代码分离到不同的类中,这绝对是个好办法,它比将所有类写在一起要好得多,同时还促进了代码的重用性。那么现在就去创建这个 Ball 类吧,在日后的学习中还要用到呢。
出处:蓝色理想
责任编辑:bluehearts
上一页 ActionScript 3.0 动画基础 [5] 下一页 ActionScript 3.0 动画基础 [7]
◎进入论坛RIA设计与应用版块参加讨论
|