通过事件控制物体移动
一、基于鼠标的事件控制物体移动
btnLeft.label="向左移动5像素";
btnRight.label="向右移动5像素";
btnUp.label="向上移动5像像素";
btnDown.label="向下移动5像像素";
btnLeft.addEventListener(MouseEvent.CLICK,onLeftClick);
btnRight.addEventListener(MouseEvent.CLICK,onRightClick);
btnUp.addEventListener(MouseEvent.CLICK,onUpClick);
btnDown.addEventListener(MouseEvent.CLICK,onDownClick);
function onLeftClick(evt:MouseEvent):void
{
//s为舞台的一flash元件实例名
s.x -= 5;
}
function onRightClick(evt:MouseEvent):void
{
s.x += 5;
}
function onUpClick(evt:MouseEvent):void
{
s.y -= 5;
}
function onDownClick(evt:MouseEvent):void
{
s.y += 5;
}
二、使用ENTER_FRAME事件控制物体移动
package
{
import flash.display.*;
import flash.events.Event;
public class FirstAnimation extends Sprite
{
private var ball:Sprite;
public function FirstAnimation():void
{
ball = new Sprite();
addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0,0,40);
ball.graphics.endFill();
ball.x = 20;
ball.y = stage.stageHeight / 2;
ball.addEventListener(Event.ENTER_FRAMEk,onEnterHandler);
}
private function onEnterHandler(evt:Event):void
{
ball.x++;
}
}
}
三、基于键盘按键控制物体移动
{
import flash.display.*;
import flash.events.*;
import flash.ui.*;
public class KeyCodes extends Sprite
{
private var ball:Sprite;
public function KeyCodes():void
{
ball = new Sprite();
addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0,0,40);
ball.graphics.endFill();
ball.x = stage.stageWidth/2;
ball.y = stage.stageHeight/2;
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler);
}
private function onKeyDownHandler(event:KeyboardEvent):void
{
trace(event.keyCode);
switch(event.keyCode)
{
case Keyboard.UP:ball.y -= 10;break;
case Keyboard.DOWN:ball.y += 10;break;
case Keyboard.LEFT:ball.x -= 10;break;
case Keyboard.RIGHT:ball.x += 10;break;
}
}
}
}
也可以通过键码来处理,键盘上的每个按键都对应有键码,如下:
{
trace(evt.keyCode);
switch(evt.keyCode.toString())
{
case "37": onLeftClick(null);break;
case "38": onUpClick(null);break;
case "39": onRightClick(null);break;
case "40": onDownClick(null);break;
}
}
37:左键.38:上键,39:右键,40:下键,上下左右四个方向键码。
四、物体拖拽移动
flash/flex中实现拖动也是通过鼠标事件来完成的,调用对象的startDrag()和stopDrag()方法,下面是个简单的实例。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="800" height="500"
creationComplete="init()" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Script>
<![CDATA[
private function init():void
{
mapImage.addEventListener(MouseEvent.MOUSE_DOWN,dargHandler);
mapImage.addEventListener(MouseEvent.MOUSE_UP,dargHandler);
mapImage.addEventListener(MouseEvent.MOUSE_OUT,dargHandler);
}
private function dargHandler(event:MouseEvent):void
{
if(event.type==MouseEvent.MOUSE_DOWN)
{
mapImage.startDrag();
}
else
{
mapImage.stopDrag();
}
}
]]>
</mx:Script>
<mx:Image x="-551.5" y="-843" source="Images/worldmap.jpg" id="mapImage"/>
</mx:Application>
这是使用Flex开发的一个小程序,在flex应用界面上放置了一个图片组件,该图片组件直接引用一张大的图片,通过给他的事件处理程序来完成拖动功能,这样的功能使用率是非常高的,Web地图,游戏中都会应用到。记得以前曾经有个朋友问我校内里的开心农场地图是怎么实现拖动的,这个实例基本上就实现了那个功能。
五、控制精灵向鼠标方向旋转
var dy:Number = mouseY - sprite.y;
sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2008-05-20 无刷新联动大烧烤(XMLHttpRequest,AJAX Library)