通过事件控制物体移动

一、基于鼠标的事件控制物体移动

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++;
  }
 }
}

 

三、基于键盘按键控制物体移动

package
{
    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;
            }
        }
    }
}

 

 也可以通过键码来处理,键盘上的每个按键都对应有键码,如下:

function onKeyboardDown(evt:KeyboardEvent):void
{
    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()方法,下面是个简单的实例。

<?xml version="1.0" encoding="utf-8"?>
<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 dx:Number = mouseX - sprite.x; 
var dy:Number = mouseY - sprite.y; 
sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI;

 

posted on 2009-05-20 14:02  Bēniaǒ  阅读(1278)  评论(0编辑  收藏  举报