2017-10-13 54 views
-1

Je suis une nouvelle personne qui apprennent script d'action 3.changement événement clavier à l'événement de la souris AS3

j'ai problème quand je convertir l'événement du clavier à l'événement de la souris quand je déplacer un personnage de marche.

Lors de l'utilisation de l'événement clavier, je n'ai aucun problème. c'est mon code

import flash.ui.Keyboard; 
    var speed:Number=2; 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, stikman); 
    function stikman(e:KeyboardEvent) 
    { 
     if (e.keyCode==Keyboard.LEFT) 
     { 
     stik.x-=speed; 
     stik.scaleX=-1; 
     stik.stik2.play(); 
     } 
     else if (e.keyCode==Keyboard.RIGHT) 
     { 
     stik.x+=speed; 
     stik.scaleX=1; 
     stik.stik2.play(); 
     } 
     } 

puis j'essaie de changer l'événement du clavier à l'événement de la souris lors du déplacement de caractère avec bouton, il doit appuyer cliquez, cliquez et cliquez sur. Je veux maintenir le clic quand je déplace le personnage et quand la souris arrête le personnage. mais je ne sais toujours pas comment. ce mon code lorsque je tente de changer d'événement de souris

 var speed:Number=2; 
    mundur.addEventListener(MouseEvent.MOUSE_DOWN, stikman); 
    function stikman(e:MouseEvent) 
     { 
     stik.x-=speed; 
     stik.scaleX=-1; 
     stik.stik2.play(); 
     } 
    maju.addEventListener(MouseEvent.CLICK, stikman2); 
    function stikman2(e:MouseEvent) 
     { 
     stik.x+=speed; 
     stik.scaleX=1; 
     stik.stik2.play(); 
     } 

Répondre

2

Parce que le clavier produit KeyboardEvent.KEY_DOWN événement à plusieurs reprises aussi longtemps que la touche est enfoncée, tandis que MouseEvent.CLICK ainsi que MouseEvent.MOUSE_DOWN sont envoyé une seule fois par action de l'utilisateur.

Avec la souris, vous devez changer la logique.

// Subscribe both buttons. 
ButtonRight.addEventListener(MouseEvent.MOUSE_DOWN, onButton); 
ButtonLeft.addEventListener(MouseEvent.MOUSE_DOWN, onButton); 

var currentSpeed:Number = 0; 
var isPlaying:Boolean = false; 

function onButton(e:MouseEvent):void 
{ 
    // Set up the directions and start the animation. 
    switch (e.currentTarget) 
    { 
     case ButtonLeft: 
      currentSpeed = -speed; 
      stik.stik2.play(); 
      stik.scaleX = -1; 
      break; 

     case ButtonRight: 
      currentSpeed = speed; 
      stik.stik2.play(); 
      stik.scaleX = 1; 
      break; 
    } 

    isPlaying = true; 

    // Call repeatedly to move character. 
    addEventListener(Event.ENTER_FRAME, onFrame); 

    // Hook the MOUSE_UP even even if it is outside the button or even stage. 
    stage.addEventListener(MouseEvent.MOUSE_UP, onUp); 
} 

function onFrame(e:Even):void 
{ 
    // Move character by the designated offset each frame. 
    stik.x += currentSpeed; 

    if (!isPlaying) 
    { 
     // Stop at last frame. 
     // if (stik.stik2.currentFrame == stik.stik2.totalFrames) 

     // Stop at frame 1. 
     if (stik.stik2.currentFrame == 1) 
     { 
      // Stop the animation. 
      stik.stik2.stop(); 

      // Stop moving. 
      removeEventListener(Event.ENTER_FRAME, onFrame); 
     } 
    } 
} 

function onUp(e:MouseEvent):void 
{ 
    // Indicate to stop when the animation ends. 
    isPlaying = false; 

    // Unhook the MOUSE_UP event. 
    stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); 
} 
+0

merci pour votre réponse monsieur, c'est à droite. mais quand la souris se lève, je veux que le personnage marche encore, puis s'arrête à la première position. pouvez-vous m'aider encore monsieur? –

+0

@BagasPR Ne vous désabonnez pas de Event.ENTER_FRAME et n'arrêtez pas l'animation. – Organis

+0

J'ai essayé avant monsieur, mais je ne peux toujours pas faire cela. Je ne comprends pas ce que tu veux dire parce que je suis encore nouveau pour ça: D. Ne pouvez-vous pas expliquer plus spécifié? lorsque la souris bas le personnage marche et quand le personnage de la souris marche encore jusqu'à la fin de la trame et ensuite revenir et arrêter à la première image (première position). merci avant –