第二章 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 在细...
第二单元第二章
第二章细胞的生活。第一节细胞的生活需要物质和能量。教学设计。一 设计思路。认识了动植物细胞,我们来了解一下细胞是怎样生活的,细胞是生物体的结构和功能的基本单位,它是物质 能量和信息的统一体,同时它又能通过 和生长使细胞增加。这些是细胞生活的主要方面,教材分别安排在三节内容中介绍。本节是第一节,体现了...
第二单元第二章
第二单元生物圈中的动物。第一节动物的主要类群 第一课时环节动物节肢动物。科目 初一生物课型 新授执笔 辛杰红 一 导学目标 知识目标 运用比较分析的方法,说明环节动物 节肢动物与陆地环境相适应的主要形态 结构和生理功能特点。能力目标 通过实验和观察等活动,阐明蚯蚓和蝗虫在运动 呼吸等方面与其陆地生活...