2015-02-08 57 views
0

我正在学习使用Adobe Flash CS6的AS3,我正在制作一个使用KeyboardEvent的动画创建移动对象的教程,它的工作原理完美,但现在我想更改它,以便可以使用屏幕上的按钮(MouseEvent s)来移动角色,但我不知道如何去做。AS3将KeyboardEvents更改为MouseEvents

var movingRight; 
var movingLeft; 

function onKeyPress(e:KeyboardEvent):void 
{ 
    if(e.keyCode == Keyboard.RIGHT){ 
     movingRight=1; 
    } 
    else if(e.keyCode == Keyboard.LEFT){ 
     movingLeft=1; 
    } 
} 

回答

2

要将您character使用按钮,你必须使用两个MouseEvent S:当按钮被按下MouseEvent.MOUSE_DOWN事件和MouseEvent.MOUSE_UP当它被释放出来,所以你可以这样做:

LeftBTN.addEventListener(MouseEvent.MOUSE_DOWN, LeftBTN_onPress); 
LeftBTN.addEventListener(MouseEvent.MOUSE_UP, LeftBTN_onRelease); 
function LeftBTN_onPress(e:MouseEvent):void 
{ 
    movingLeft = 1; 
} 
function LeftBTN_onRelease(e:MouseEvent):void 
{ 
    character.gotoAndStop(1); 
    movingLeft = 0; 
} 

RightBTN.addEventListener(MouseEvent.MOUSE_DOWN, RightBTN_onPress); 
RightBTN.addEventListener(MouseEvent.MOUSE_UP, RightBTN_onRelease); 
function RightBTN_onPress(e:MouseEvent):void 
{ 
    movingRight = 1; 
} 
function RightBTN_onRelease(e:MouseEvent):void 
{ 
    character.gotoAndStop(4); 
    movingRight = 0; 
} 

你也可以使用一个功能,满足您的所有事件监听器是这样的:

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_character); 
stage.addEventListener(KeyboardEvent.KEY_UP, move_character); 
LeftBTN.addEventListener(MouseEvent.MOUSE_DOWN, move_character); 
LeftBTN.addEventListener(MouseEvent.MOUSE_UP, move_character); 
RightBTN.addEventListener(MouseEvent.MOUSE_DOWN, move_character); 
RightBTN.addEventListener(MouseEvent.MOUSE_UP, move_character); 

function move_character(e:*){ 

    var event_type:String = e.type;      // get event type : to identify which kind of event is fired 
    var current_target:String = e.currentTarget.name; // get target name : to identify the target of the fired event 

    switch (event_type){ 

     case MouseEvent.MOUSE_DOWN : 

      if(current_target == 'LeftBTN') movingLeft = 1; 
      else movingRight = 1; 

      break; 

     case MouseEvent.MOUSE_UP: 

      if(current_target == 'LeftBTN'){ 
       character.gotoAndStop(1); 
       movingLeft = 0; 
      } else { 
       character.gotoAndStop(4); 
       movingRight = 0; 
      }   
      break;  

     case KeyboardEvent.KEY_DOWN: 

      if (e.keyCode == Keyboard.RIGHT){   
       movingRight = 1;    
      } else if (e.keyCode == Keyboard.LEFT) {    
       movingLeft = 1;   
      }   
      break; 

     case KeyboardEvent.KEY_UP: 

      if (e.keyCode == Keyboard.LEFT) {   
       character.gotoAndStop(1); 
       movingLeft = 0;   
      } else if (e.keyCode == Keyboard.RIGHT) {   
       character.gotoAndStop(4); 
       movingRight = 0;    
      } 
      break; 
    } 

} 

或使用e参数作为Event

function move_character(e:Event){ 

    var event_type:String = e.type;      // get event type : to identify which kind of event is fired 
    var current_target:String = e.currentTarget.name; // get target name : to identify the target of the fired event 
    var key_code:Number; 

    switch (event_type){ 

     case MouseEvent.MOUSE_DOWN : 

      if(current_target == 'LeftBTN') movingLeft = 1; 
      else movingRight = 1; 

      break; 

     case MouseEvent.MOUSE_UP: 

      if(current_target == 'LeftBTN'){ 
       character.gotoAndStop(1); 
       movingLeft = 0; 
      } else { 
       character.gotoAndStop(4); 
       movingRight = 0; 
      }   
      break;  

     case KeyboardEvent.KEY_DOWN: 

      key_code = KeyboardEvent(e).keyCode; 

      if (key_code == Keyboard.RIGHT){  
       movingRight = 1;    
      } else if (key_code == Keyboard.LEFT) {    
       movingLeft = 1;   
      }   
      break; 

     case KeyboardEvent.KEY_UP: 

      key_code = KeyboardEvent(e).keyCode; 

      if (key_code == Keyboard.LEFT) {   
       character.gotoAndStop(1); 
       movingLeft = 0;   
      } else if (key_code == Keyboard.RIGHT) {   
       character.gotoAndStop(4); 
       movingRight = 0;    
      } 
      break; 
    } 

} 

希望能有所帮助。

+0

已投票。该方法作为一个非类型化的参数,这是不好的做法。既然所有的事件都是从事件继承的,为什么在这个世界上没有将这个参数输入为Event? – BotMaster 2015-02-09 13:37:53

+0

@BotMaster我同意你的看法,但我试图做到这一点很简单,因为OP在AS3的世界里是新的。我会编辑我的答案来补充。 – akmozo 2015-02-09 13:58:50

0

把两个按钮在舞台上,他们的名字一样btnRight和btnLeft,然后用这个代码

btnLeft.addEventListener(MouseEvent.CLICK, onButtonClick, false, 0, true); 
btnRight.addEventListener(MouseEvent.CLICK, onButtonClick, false, 0, true); 

function onButtonClick(evt:MouseEvent) { 
    if (evt.target == btnLeft) movingLeft = 1; 
    else movingRight = 1; 
} 

我也建议只使用一个变种名为movingDirection可以是1,0或 - 1 :)