Flash AS 教程:子类化显示对象
Flash AS 教程:子类化显示对象
发布时间:2016-12-21 来源:查字典编辑
摘要:子类化显示对象前面已经讲过生成Sprite或MovieClip类的子类,对某个类进行子类化是非常有用的。首先,大家可能对AS3取消attac...

子类化显示对象

前面已经讲过生成 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 类吧,在日后的学习中还要用到呢。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Flash教程学习
热门Flash教程学习
网页设计子分类