积少成多Flash ActionScript 3.0(7) - 交互之鼠标事件和键盘事件
2009-03-16 08:45
961 查看
[源码下载]
[align=center]积少成多Flash ActionScript 3.0(7) - 交互之鼠标事件和键盘事件[/align]
作者:webabcd
介绍
演示使用 Flash ActionScript 3.0 来监听用户的键盘事件和鼠标事件,并对其作相应的处理
键盘事件 - 在 flash.events.KeyboardEvent 类下。只有两个事件类型 KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP 。
鼠标事件 - 在 flash.events.MouseEvent 类下。常用的事件类型有 MouseEvent.MOUSE_DOWN, MouseEvent.DOUBLE_CLICK, MouseEvent.MOUSE_UP, MouseEvent.MOUSE_OVER, MouseEvent.MOUSE_MOVE 和 MouseEvent.MOUSE_OUT 等。
1、处理键盘事件
做 4 个只有两帧的 MovieClip 并放到 UI 上,分别用于提示上/下/左/右键的按键情况,默认情况下显示第一帧,当用户按下了对应的键时则显示第二帧。这 4 个 MovieClip 的名称分别为 btnUp, btnDown, btnLeft, btnRight
再在 UI 上画一个物体,由于显示用户的键盘事件(上/下/左/右)所产生的结果
Main.as
package
{
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
// 保存用户是否按下了上/下/左/右键
public var isUp:Boolean = false;
public var isDown:Boolean = false;
public var isLeft:Boolean = false;
public var isRight:Boolean = false;
// 每次 ENTER_FRAME 物体所需移动的距离
public var step:Number = 5;
public function Main()
{
// 设置四个用于显示方向的 MovieClip 的初始状态为停在第一帧
btnUp.stop();
btnDown.stop();
btnLeft.stop();
btnRight.stop();
// 处理按键的按下、放开事件(在舞台上侦测该事件)
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleaseHandler);
// 用于响应按键事件的 ENTER_FRAME
this.addEventListener(Event.ENTER_FRAME, enterFrameHandlerForKeyboard);
}
protected function keyPressHandler(event:KeyboardEvent):void
{
// 检测用户按下的键
switch (event.keyCode)
{
case Keyboard.UP:
isUp = true;
btnUp.gotoAndStop(2);
block.rotation = 0;
break;
case Keyboard.DOWN: // 按的是“下”键
isDown = true; // 保存用户的按键信息。即用户正在按“下”键
btnDown.gotoAndStop(2); // 用于显示方向“下”的 MovieClip 停到第二帧
block.rotation = 180; // 物体旋转 180 度
break;
case Keyboard.LEFT:
isLeft = true;
btnLeft.gotoAndStop(2);
block.rotation = 270;
break;
case Keyboard.RIGHT:
isRight = true;
btnRight.gotoAndStop(2);
block.rotation = 90;
break;
}
}
protected function keyReleaseHandler(event:KeyboardEvent):void
{
// 检测用户放开的键
switch( event.keyCode )
{
case Keyboard.UP: // 按的是“上”键
isUp = false; // 保存用户的按键信息。即用户已经不再按“上”键了
btnUp.gotoAndStop(1); // 用于显示方向“上”的 MovieClip 停到第一帧
break;
case Keyboard.DOWN:
isDown = false;
btnDown.gotoAndStop(1);
break;
case Keyboard.LEFT:
isLeft = false;
btnLeft.gotoAndStop(1);
break;
case Keyboard.RIGHT:
isRight = false;
btnRight.gotoAndStop(1);
break;
}
}
protected function enterFrameHandlerForKeyboard(event:Event):void
{
// 根据用户的按键情况。将物体向上/下/左/右移动指定的距离
if (isLeft)
{
block.x -= step;
}
if (isRight)
{
block.x += step;
}
if (isUp)
{
block.y -= step;
}
if (isDown)
{
block.y += step;
}
}
}
}
2、处理鼠标事件
在 UI 上画一个物体,由于显示用户的鼠标事件所产生的结果,即该物体会向用户在舞台上所单击的位置移动
Main.as
package
{
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
// 鼠标单击位置的坐标
public var targetX:Number = 0;
public var targetY:Number = 0;
// 物体是否再向鼠标单击的位置移动
public var moving:Boolean = false;
// 每次 ENTER_FRAME 物体所需移动的距离
public var step:Number = 5;
public function Main()
{
// 处理鼠标的按下事件(在舞台上侦测该事件)
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
// 用于响应鼠标按下事件的 ENTER_FRAME
this.addEventListener(Event.ENTER_FRAME, enterFrameHandlerForMouse);
}
protected function mouseDownHandler(event:MouseEvent):void
{
// 当用户在舞台上按下鼠标后,获取鼠标的坐标
targetX = event.stageX;
targetY = event.stageY;
// 物体正在向鼠标单击的位置移动
moving = true;
}
protected function enterFrameHandlerForMouse(event:Event):void
{
if (moving)
{
// 计算物体在 X 方向和 Y 方向上分别需要移动的距离
var offsetX:Number = block.x - targetX;
var offsetY:Number = block.y - targetY;
// 计算物体需要旋转的角度
var targetRotation:Number = -Math.atan2(offsetX, offsetY) / (Math.PI / 180);
block.rotation = targetRotation;
if( Math.sqrt((offsetX*offsetX) + (offsetY*offsetY)) > step )
{
// 如果还没有移动到目标位,则继续移动指定的距离
block.y -= step * Math.cos(targetRotation * (Math.PI/180));
block.x += step * Math.sin(targetRotation * (Math.PI/180));
}
else
{
// 物体已经移动到鼠标所单击的位置
moving = false;
}
}
}
}
}
OK
[源码下载]
[align=center]积少成多Flash ActionScript 3.0(7) - 交互之鼠标事件和键盘事件[/align]
作者:webabcd
介绍
演示使用 Flash ActionScript 3.0 来监听用户的键盘事件和鼠标事件,并对其作相应的处理
键盘事件 - 在 flash.events.KeyboardEvent 类下。只有两个事件类型 KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP 。
鼠标事件 - 在 flash.events.MouseEvent 类下。常用的事件类型有 MouseEvent.MOUSE_DOWN, MouseEvent.DOUBLE_CLICK, MouseEvent.MOUSE_UP, MouseEvent.MOUSE_OVER, MouseEvent.MOUSE_MOVE 和 MouseEvent.MOUSE_OUT 等。
1、处理键盘事件
做 4 个只有两帧的 MovieClip 并放到 UI 上,分别用于提示上/下/左/右键的按键情况,默认情况下显示第一帧,当用户按下了对应的键时则显示第二帧。这 4 个 MovieClip 的名称分别为 btnUp, btnDown, btnLeft, btnRight
再在 UI 上画一个物体,由于显示用户的键盘事件(上/下/左/右)所产生的结果
Main.as
package
{
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
// 保存用户是否按下了上/下/左/右键
public var isUp:Boolean = false;
public var isDown:Boolean = false;
public var isLeft:Boolean = false;
public var isRight:Boolean = false;
// 每次 ENTER_FRAME 物体所需移动的距离
public var step:Number = 5;
public function Main()
{
// 设置四个用于显示方向的 MovieClip 的初始状态为停在第一帧
btnUp.stop();
btnDown.stop();
btnLeft.stop();
btnRight.stop();
// 处理按键的按下、放开事件(在舞台上侦测该事件)
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleaseHandler);
// 用于响应按键事件的 ENTER_FRAME
this.addEventListener(Event.ENTER_FRAME, enterFrameHandlerForKeyboard);
}
protected function keyPressHandler(event:KeyboardEvent):void
{
// 检测用户按下的键
switch (event.keyCode)
{
case Keyboard.UP:
isUp = true;
btnUp.gotoAndStop(2);
block.rotation = 0;
break;
case Keyboard.DOWN: // 按的是“下”键
isDown = true; // 保存用户的按键信息。即用户正在按“下”键
btnDown.gotoAndStop(2); // 用于显示方向“下”的 MovieClip 停到第二帧
block.rotation = 180; // 物体旋转 180 度
break;
case Keyboard.LEFT:
isLeft = true;
btnLeft.gotoAndStop(2);
block.rotation = 270;
break;
case Keyboard.RIGHT:
isRight = true;
btnRight.gotoAndStop(2);
block.rotation = 90;
break;
}
}
protected function keyReleaseHandler(event:KeyboardEvent):void
{
// 检测用户放开的键
switch( event.keyCode )
{
case Keyboard.UP: // 按的是“上”键
isUp = false; // 保存用户的按键信息。即用户已经不再按“上”键了
btnUp.gotoAndStop(1); // 用于显示方向“上”的 MovieClip 停到第一帧
break;
case Keyboard.DOWN:
isDown = false;
btnDown.gotoAndStop(1);
break;
case Keyboard.LEFT:
isLeft = false;
btnLeft.gotoAndStop(1);
break;
case Keyboard.RIGHT:
isRight = false;
btnRight.gotoAndStop(1);
break;
}
}
protected function enterFrameHandlerForKeyboard(event:Event):void
{
// 根据用户的按键情况。将物体向上/下/左/右移动指定的距离
if (isLeft)
{
block.x -= step;
}
if (isRight)
{
block.x += step;
}
if (isUp)
{
block.y -= step;
}
if (isDown)
{
block.y += step;
}
}
}
}
2、处理鼠标事件
在 UI 上画一个物体,由于显示用户的鼠标事件所产生的结果,即该物体会向用户在舞台上所单击的位置移动
Main.as
package
{
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
// 鼠标单击位置的坐标
public var targetX:Number = 0;
public var targetY:Number = 0;
// 物体是否再向鼠标单击的位置移动
public var moving:Boolean = false;
// 每次 ENTER_FRAME 物体所需移动的距离
public var step:Number = 5;
public function Main()
{
// 处理鼠标的按下事件(在舞台上侦测该事件)
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
// 用于响应鼠标按下事件的 ENTER_FRAME
this.addEventListener(Event.ENTER_FRAME, enterFrameHandlerForMouse);
}
protected function mouseDownHandler(event:MouseEvent):void
{
// 当用户在舞台上按下鼠标后,获取鼠标的坐标
targetX = event.stageX;
targetY = event.stageY;
// 物体正在向鼠标单击的位置移动
moving = true;
}
protected function enterFrameHandlerForMouse(event:Event):void
{
if (moving)
{
// 计算物体在 X 方向和 Y 方向上分别需要移动的距离
var offsetX:Number = block.x - targetX;
var offsetY:Number = block.y - targetY;
// 计算物体需要旋转的角度
var targetRotation:Number = -Math.atan2(offsetX, offsetY) / (Math.PI / 180);
block.rotation = targetRotation;
if( Math.sqrt((offsetX*offsetX) + (offsetY*offsetY)) > step )
{
// 如果还没有移动到目标位,则继续移动指定的距离
block.y -= step * Math.cos(targetRotation * (Math.PI/180));
block.x += step * Math.sin(targetRotation * (Math.PI/180));
}
else
{
// 物体已经移动到鼠标所单击的位置
moving = false;
}
}
}
}
}
OK
[源码下载]
相关文章推荐
- 积少成多Flash ActionScript 3.0(7) - 交互之鼠标事件和键盘事件
- 积少成多Flash(7) - ActionScript 3.0 交互之鼠标事件和键盘事件
- 积少成多Flash ActionScript 3.0(1) - 基础之数据类型、操作符和流程控制语句
- 积少成多Flash ActionScript 3.0(3) - 基础之以文本形式、XML形式和JSON形式与ASP.NET通信
- 积少成多Flash ActionScript 3.0(6) - 绘图之图形和转换
- 积少成多Flash ActionScript 3.0(4) - 实例之Hello World, 时钟, 计时器
- 积少成多Flash ActionScript 3.0(3) - 基础之以文本形式、XML形式和JSON形式与ASP.NET通信
- 积少成多Flash ActionScript 3.0(5) - 实例之闹钟
- 积少成多Flash ActionScript 3.0(4) - 实例之Hello World, 时钟, 计时器
- 积少成多Flash ActionScript 3.0(5) - 实例之闹钟(自定义事件, 画图, 动画)
- 积少成多Flash ActionScript 3.0(1) - 基础之数据类型、操作符和流程控制语句
- 积少成多Flash ActionScript 3.0(2) - 基础之包、类、包外类、命名空间、属性、方法、接口和继承
- FLEX actionscript响应鼠标和键盘事件
- 积少成多Flash ActionScript 3.0(6) - 绘图之图形和转换
- Flash Action Script 3.0 实现 MovieClip 的拖拽
- OpenGL(十六) 鼠标、键盘交互响应事件
- 【转载】战速决Flash ActionScript 3.0 - 以文本形式、XML形式和JSON形式与ASP.NET通信续
- Flash.ActionScript.3.0动画教程_code2
- FLASH ActionScript 3.0 sns cocial game 开发中的定时器
- 稳扎稳打Silverlight(13) - 2.0交互之鼠标事件和键盘事件