对象动画

动画是使内容移动或者使内容随时间发生变化的过程。脚本动画是视频游戏的基础部分,通常用于将优美、有用的交互线索添加到其它应用程序中。

脚本动画的基本概念是变化一定要发生,而且变化一定要分时间逐步完成。使用常见的循环语句,可很容易在 ActionScript 中使内容重复。但是,在更新显示之前,循环将遍历其所有迭代。要创建脚本动画,需要编写 ActionScript,它随时间重复执行某个动作,每次运行时还更新屏幕。

例如,假设要创建一个简单的动画,如使球沿着屏幕运动。ActionScript 包括一个允许您跟踪时间和相应更新屏幕的简单机制,这意味着您可以编写代码,每次让球移动一点点,直到球到达目标为止。每次移动后,屏幕都会更新,从而使跨舞台的运动在查看器中可见。

从实际观点来看,让脚本动画与 SWF 文件的帧速率同步(换句话说,每次新帧显示时都设计一个动画变化)才有意义,因为这是 Flash Player 更新屏幕的速度。每个显示对象都有 enterFrame 事件,它根据 SWF 文件的帧速率来调度,即每帧一个事件。创建脚本动画的大多数开发人员都使用 enterFrame 事件作为一种方法来创建随时间重复的动作。可以编写代码以侦听 enterFrame 事件,每一帧都让动画球移动一定的量,当屏幕更新时(每一帧),将会在新位置重新绘制该球,从而产生了运动。

注意

 

另一种随时间重复执行某个动作的方法是使用 Timer 类。每次过了指定的时间时,Timer 实例都会触发事件通知。可以编写通过处理 Timer 类的 timer 事件来执行动画的代码,将时间间隔设置为一个很小的间隔(几分之几秒)。有关使用 Timer 类的详细信息,请参阅控制时间间隔

在下面的示例中,将在舞台上创建一个名为 circle 的圆 Sprite 实例。当用户单击圆时,脚本动画序列开始,从而使 circle 淡化(其 alpha 属性值减少),直到完全透明:

import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;

// 绘制圆并将其添加到显示列表中
var circle:Sprite = new Sprite();
circle.graphics.beginFill(0x990000);
circle.graphics.drawCircle(50, 50, 50);
circle.graphics.endFill();
addChild(circle);

// 此动画开始后,每一帧都会调用此函数。
// 此函数进行的更改
//(每一帧都会更新屏幕)将导致产生动画效果。
function fadeCircle(event:Event):void
{
    circle.alpha -= .05;
    
    if (circle.alpha <= 0)
    {
        circle.removeEventListener(Event.ENTER_FRAME, fadeCircle);
    }
}

function startAnimation(event:MouseEvent):void
{
    circle.addEventListener(Event.ENTER_FRAME, fadeCircle);
}

circle.addEventListener(MouseEvent.CLICK, startAnimation);

当用户单击圆时,将函数 fadeCircle() 订阅为 enterFrame 事件的侦听器,这意味着每一帧都会开始调用一次该函数。通过更改 circlealpha 属性,该函数会淡化圆,因此对于每个帧,圆的 alpha 一次减少 .05 (5%),并且更新屏幕。最后,当 alpha 值为 0(circle 完全透明)时,fadeCircle() 函数作为事件侦听器将被删除,从而结束动画。

以上代码还可用来创建动画运动而不是淡化。通过用不同属性替换函数中表示 enterFrame 事件侦听器的 alpha,就可获得该属性的动画效果。例如,将以下行

    circle.alpha -= .05;

更改为以下代码

    circle.x += 5;

将获得 x 属性的动画效果,从而使圆在舞台上移到右侧。当到达需要的 x 坐标时,通过更改结束动画的条件就可结束动画(即取消订阅 enterFrame 侦听器)。


Flash CS3

 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000169.html