AS中事件的精髓

事件与处理函数,要想了解事件,必须了解侦听器(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;
			}
		}
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值