积少成多Flash(7) - ActionScript 3.0 交互之鼠标事件和键盘事件
2009-11-05 00:00:00 来源:WEB开发网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
本文示例源代码或素材下载
Tags:积少成多 Flash ActionScript
编辑录入:爽爽 [复制链接] [打 印]- ››flash文件的压缩方法(swf文件压缩瘦身)
- ››Flash鼠绘教程:临摹徐悲鸿的骏马图
- ››Flash实例:AS3制作茶杯震动动画
- ››Flash AS 3.0实例教程:Main类打造发散效果
- ››Flash cs3仿真艺术设计3.6:运用遮罩打造焦点效果...
- ››Flash cs3仿真艺术设计4.1:阴影的基本运用
- ››Flash CS4教程:3d工具实例和骨骼工具
- ››flash加载外部文本文件的3种方法
- ››flash在有限的页面内制作大的地图
- ››Flash教程:AS代码制作计时器方法
- ››Flash AS教程:propertydata问题解决
- ››FlashFXP v4.0.0 Build 1486 RC2 [烈火汉化]
更多精彩
赞助商链接