为什么可以被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
为什么?
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); } } }
相关文章推荐
- 为什么可以被FlashPlayer启动的类必须继承自Sprite或MovieClip?
- Java中是否可以继承String类,为什么
- java源文件当中可以有多个类,但是为什么只能有一个public类呢? 当类被修饰为public的话,为什么源文件名必须要与类名相同呢?
- c++设计一个不能被继承的类,为什么必须是虚继承?原因分析
- 小结在一个java源文件当中可以有多个类,但是为什么只能有一个public类呢?而当这个类被修饰为public的话,为什么源文件名必须要与类名相同呢?
- 关于loader加载的东西必须是继承sprite
- C语言问题:为什么可以留着数组中第一维的参数不进行说明,但是其他维数必须说明呢?
- 为什么虚函数必须是非静态成员函数 构造函数可以为static
- Java中是否可以继承String类,为什么
- c++设计一个不能被继承的类,为什么必须是虚继承?原因分析
- 为什么IIS无法启动,以前是可以了.而且WWW服务也启动不了提示:错误127,找不到指定程序.
- 抽象类继承抽象类可以不重写父类的抽象方法,普通类继承抽象类必须重写父类中的抽象方法,实现接口也是同样的道理
- 为什么其他类没继承System类 ,也可以直接使用System.exit()方法??
- 为什么启动代码必须用汇编
- 为什么NORflash可以作为启动设备直接执行程序
- zookeeper启动为什么占用8080端口,修改哪个配置文件可以改变端口?
- 为什么虚函数必须是非静态成员函数 构造函数可以为static
- 关于继承BaseServlet后为什么form表单中必须加上method=“post”
- 为什么内部类使用的局部变量必须是final而全局变量可以是no-final
- Java中是否可以继承String类,为什么