您的位置:首页 > 其它

为什么可以被FlashPlayer启动的类必须继承自Sprite或MovieClip?

2012-02-19 14:54 351 查看
我们编译一个ActionScript3类(Class)成为swf,如果想让该swf能够被FlashPlayer直接启动执行,那么该类必须继承自Sprite或MovieClip。

为什么?

FlashPlayer是swf文件的运行环境,解释器。它规定了启动类必须继承自Sprite或MovieClip。

FlashPlayer执行某个swf的时候,首先动态创建舞台(Stage),然后找到启动类,实例化它,并将它作为显示列表的成员,结构上被加到Stage下方。

这说明:启动类必须是个显示类(DisplayObject)。

swf程序有很多显示对象要展现,通常这些显示对象要加入到显示列表中,结构上被加到启动类对象的下面。

于是启动类必须是个容器才行。

只要符合上面两个特点,那么就能够作为启动类。

我们知道,ActionScript3的显示类的继承关系图中,Sprite是最“原始”的容器类,没有时间轴的概念,只有一帧;而MovieClip派生自Sprite,有时间轴,可以有多帧。

其他一切容器类皆根据用途派生自它们其中一个。

它们是符合启动类要求的最基本的类。

于是乎。。。

我们可以通过实验验证这一点:

======================================================================================

通过FlashBuilder创建ActionScript项目:startClass。

编译下面程序,得到startClass.swf,鼠标双击运行,你会看到一个灰色的圆,说明该程序被启动了。

如果你将startClass的基类改成Sprite或MovieClip之外的显示类(比如Shape),运行就会报错:TypeError: Error #2023: 类 startClass$ 必须继承 Sprite 才能链接到根。

startClass.as

package
{
import flash.display.Shape;

public class startClass extends Shape
{
public function startClass()
{
//画个圆圈
this.graphics.clear();
this.graphics.beginFill(0x999999);
this.graphics.drawCircle(100,100,100);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐