事件与处理函数,要想了解事件,必须了解侦听器(Listener)和处理函数(Handler)。
侦听器是一个用于侦听事件的对象,处理函数是对事件进行相应的操作及响应。
下面是一段在舞台中创建 Sprite 影片,并进行绘图,然后再为
其添加侦听器的代码:
在初始化函数(init)中创建一个 Sprite 影片,并在里面画圆,置于舞台中心,最后两
句是为它添加两个侦听器,侦听鼠标按下(MOUSE_DOWN)和鼠标弹起(MOUSE_UP)这两个事件。
它们是 MouseEvent 类的两个属性,而这个类必需要导入。最后定义两个处理函数
onMouseDown 和 onMouseUp。
package sample
{
/**
* ...
* @author ...
*/
import flash.display.Sprite;
import flash.events.MouseEvent;
public class EventDemo extends Sprite
{
private var eventSprite:Sprite;
public function EventDemo()
{
init();//构造函数中尽量少写代码
}
public function init():void {
eventSprite = new Sprite();
addChild(eventSprite);
eventSprite.graphics.beginFill(0xFF0000);
eventSprite.graphics.drawCircle(0, 0, 100);
eventSprite.graphics.endFill();
eventSprite.x = stage.stageWidth / 2;
eventSprite.y = stage.stageHeight / 2;
eventSprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
eventSprite.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
}
private function onMouseDown(event:MouseEvent):void {
trace("mouse down");
}
private function onMouseUp(event:MouseEvent):void {
trace("mouse up");
}
}
}
由事件对象调用事件处理函数,通常还会包括一些事件信息。在处理鼠标事件时,就包
括触发该事件时鼠标位置的信息如:鼠标点击在按钮上。对于键盘事件,就要包括按下键时
的信息如 Ctrl,Alt,Shift 等。把上述示例保存为 EventDemo.as 文件,并选择一种前面
讲过的编译方式。当运行 SWF 时,就会看到每次点击或图形时,都会输出 pressed 或
released。
from 《AS3.0 Animation》
动画事件
我们希望能够使用代码让物体动起来,并允许屏幕反复地刷新。
看一个AS3动画
init 函数创建了一个名为 ball 的 Sprite 影片,并为其建立事件侦听。
onEnterFrame 函数负责 ball 的运动及屏幕刷新工作。这是学习本书内容的基础,也是使
用 ActionScript 创建动画的基础,所以务必要掌握。
package sample
{
/**
* ...
* @author ...
*/
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Stage;
public class AnimationDemo extends Sprite
{
private var ball:Sprite;
public function AnimationDemo()
{
init();
}
private function init():void {
ball = new Sprite();
addChild(ball);
ball.graphics.beginFill(0xFF0000);
ball.graphics.drawCircle(0, 0, 40);
ball.graphics.endFill();
ball.x = 20;
ball.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(event:Event):void {
//ball.x++;
ball.x += 5;
if (ball.x > stage.stageWidth) {//当圆超出舞台边界时自动回到起始点
ball.x = 0;
}
}
}
}