第二章ActionScript

发布 2022-07-15 00:19:28 阅读 1007

第二章 actionscript 3.0 动画基础。

类和面向对象编程。

一个类最基本的两个部分:属性(数据或信息),行为(动作或它能做的事)。属性(property)指用于保存与该类有关的信息变量,行为(beh**ior)就是指函数,如果一个函数是这个类中的一部分,那么我们就称它为方法(method)。

一个基本的类:

常用 flash 的朋友都知道,我们可以在库中创建一个元件,用这个元件可以在舞台上创建出很多的实例。与元件和实例的关系相同,类就是一个模板,而对象(如同实例)就是类的一个特殊表现形式。下面来看一个类的例子:

package

package {

public class mysubclass extends mybaseclass {

public function saygoodbye():void {

trace("goodbye from mysubclass");

不要忘记,每个类都必须在其自身的文件中,文件名为该类的类名,扩展名 .as,所以必须要有 文件和 文件。因此,在使用 flash cs3 ide 时,保存的 fla 文件,要与这两个类在同一个文件夹。

下面**会生产两个实例,把它写入时间轴看看会发生什么:

var base:mybaseclass = new mybaseclass();

var sub:mysubclass = new mysubclass();

第一个实例没什么可说的,值得注意的是第二个实例中的 sayhello 方法,虽然在mysubclass 中没有定义 sayhello,但它却是继承自 mybaseclass 类的。另一个值得注意的是,增加了一个新的方法 saygoodbye,这是父类所没有的。

下面说说,在子类中如何改变一个父类中已存在的方法。在 as 2 中,我们可以只需要重新定义这个方法就可以了。而在 as 3 中,则必需明确地写出 override 关键字,来进行重新定义。

package {

public class mysubclass extends mybaseclass {

override public function sayhello():void {

trace("hola from mysubclass");

public function saygoodbye():void {

trace("goodbye from mysubclass");

请注意,原来的 sayhello 方法被重写,再调用 mysubclass 后,就有了新的信息。另外,私有成员也不能被重写,因为它们只能被它们自身的类访问。

movieclip/sprite 子类。

我们可以自己写一个类,然后让另一个类去继承它。在 as 3 中,所有**都不是写在时间轴上的,那么它们一开始都要继承自 movieclip 或 sprite。 movieclip 类是影片剪辑对象属性和方法的 actionscript 模板。

它包括我们所熟悉的属性如:影片的 x,y 坐标,缩放等,这些在 as 3 中的变化不大。

as 3 还增加了 sprite 类,通常把它理解为不在时间轴上的影片剪辑。很多情况下,只使用**操作对象,并不涉及时间轴和帧,这时就应该使用 sprite 这个轻型的类。如果一个类继承自 movieclip 或 sprite ,那么它会自动拥有该类所有的属性和方法,我们还可以为这个类增加特殊的属性和方法。

例如,游戏设计一个太空船的对象,我们希望它拥有一个图形,并且在屏幕的某个位置移动,旋转,并为动画添加 enterframe 侦听器,还有鼠标、键盘的侦听等。这些都可以由movieclip 或 sprite 来完成,所以就要继承自它们。同时,还可以增加一些属性如:

速度(speed)、 油量(fuel)、 损坏度(damage),还有像起飞(takeoff)、 坠落(crash)、射击(shoot)或是自毁(selfdestruct)等方法。那么这个类大概是这样的:

package {

import

public class spaceship extends sprite {

private var speed:number = 0;

private var damage:number = 0;

private var fuel:number = 1000;

public function takeoff():void {

public function crash():void {

public function shoot():void {

public function selfdestruct():void {

注意,首先要导入 包中的 sprite 类,如果要导入 movieclip 类,同样也需要导入这个相同的包 类。

怎样让它循环执行?看看我第一次的尝试,这也是很多 as 初学者都会犯的错误。这是在很多程序设计语言中都存在的循环结构,如 for 和 while。

用循环结构使**重复执行,这就是我曾写的那段:

for (i = 0; i < 500; i++)

= i;图 2-6 为什么循环结构无法产生动画。

实际上我们使用自定义规则使球移动到指定位置,并创建了 500 次新的场景。但在循环结束之前没有给出显示,这是因为 flash 只在每一帧结束后才进行一次刷新,这点很重要。

以下是 flash 进入帧的动作顺序:

1.在舞台上放置所有的对象,不论在何级,何层,或是否为加载的影片。

2.执行帧上所有的 action 脚本(actionscript),不论在何级,何层,不论处于影片剪辑还是按钮中,也不论它嵌套在何处。

3.判断是否到了该显示的时候。如果设置帧频为 20 帧/秒,flash 最少要等上一帧显示后50 毫秒后再进行下一次显示,显示了该帧后,就要编译和进入下一帧。

如果帧频没有到 20 帧/秒,那么要等待到正确的时间再去执行。

定时时间存在着一些问题。首先,众所周知帧频是不精确的(即使在 flash 9 中),不要依赖它作为精确的定时器。其次,在大量的编译和 as 执行花费的时间会超出规定的时间。

尽管如此,我们也不必担心自己的脚本会被砍掉一部分。在进入第 3 步之前,flash 会完成所有可执行**(第2 步),即使需要延缓帧频也要完成。flash 为了能完成脚本,甚至会等上 15 秒。

在上面的例子中,flash 等待循环结束,然后进入下一帧,只在跳转到下一帧时进行屏幕的刷新。这就是为什么我们看到的是跳动而不是移动。因此,要想完成移动,我们所要做的就是打散这个循环,请回过头参考图 2-5。

帧循环。帧循环的理念,存在于 flash 最早的版本中,那时 actionscript 还不像今天那么强大。把**写入关键帧,并在下一帧中写入像 gotoandplay 这样的语句,使**头(playhead)回到前一帧。

这样两帧之间就形成了一个无限循环,每当**头到了**帧上时,就会执行那些**。例如,在舞台上有一个实例名为 ball 的影片剪辑。

第二单元第二章

细胞的生活需要物质和能量。1 细胞中的物质分为 有机物 糖类 脂类 蛋白质和核酸。分子比较大,含碳。无机物 水 无机盐 氧等。分子比较小,一般不含碳。物质是由分子构成的,分子是由原子构成的。2 一般细胞中的带酸味和带甜味的物质存在于细胞液泡中的细胞液中。3 细胞膜控制物质的进出 选择透过性 4 在细...

第二单元第二章

第二章细胞的生活。第一节细胞的生活需要物质和能量。教学设计。一 设计思路。认识了动植物细胞,我们来了解一下细胞是怎样生活的,细胞是生物体的结构和功能的基本单位,它是物质 能量和信息的统一体,同时它又能通过 和生长使细胞增加。这些是细胞生活的主要方面,教材分别安排在三节内容中介绍。本节是第一节,体现了...

第二单元第二章

第二单元生物圈中的动物。第一节动物的主要类群 第一课时环节动物节肢动物。科目 初一生物课型 新授执笔 辛杰红 一 导学目标 知识目标 运用比较分析的方法,说明环节动物 节肢动物与陆地环境相适应的主要形态 结构和生理功能特点。能力目标 通过实验和观察等活动,阐明蚯蚓和蝗虫在运动 呼吸等方面与其陆地生活...