2010-11-22 11 views
0

Problème stupide. embarrassé que je n'ai pas trouvé de solution. je suis fatigué.ActionScript - Problème de logique de la souris

un carré rouge sur la scène. le déplacement de la souris vers le bas + le déplacement de la souris déplace le carré rouge vers le bas (+ y), tandis que le déplacement de la souris vers le bas et le déplacement de la souris déplace le carré rouge vers le haut (-y). ce mouvement opposé est désiré. Toutefois, au cours d'un déplacement de la souris, le carré doit commencer à se déplacer à partir de sa position y actuelle, quel que soit le nombre de dragons de souris ayant changé sa position initialisée. actuellement, le carré rouge commencera toujours à l'étape 0, puisque ma variable mouseDownOrigin est incorrecte parce que mon cerveau est endormi.

package 
{ 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

public class Test extends Sprite 
    { 
    private var sp:Sprite = new Sprite(); 
    private var mouseDownOrigin:int; 

    public function Test() 
     { 
     sp.graphics.beginFill(0xFF0000); 
     sp.graphics.drawRect(0, 0, 100, 100); 
     sp.x = sp.y = 200; 
     addChild(sp); 

     stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler); 
     } 

    private function mouseDownEventHandler(evt:MouseEvent):void 
     { 
     mouseDownOrigin = evt.stageY; 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler); 
     stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
     } 

    private function mouseMoveEventHandler(evt:MouseEvent):void 
     { 
     sp.y = mouseDownOrigin - evt.stageY; 
     } 

    private function mouseUpEventHandler(evt:MouseEvent):void 
     { 
     stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler); 
     stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
     } 
    } 
} 

Répondre

2

Vous devez enregistrer la position y carré rouge sur le gestionnaire d'événements MouseUp, l'enregistrement pratiquement la position que vous laissez la place.

private var currentPosition:int; 

    private function mouseUpEventHandler(evt:MouseEvent):void 
    { 
    currentPosition = sp.y; 

    stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    } 

    private function mouseMoveEventHandler(evt:MouseEvent):void 
    { 
     var n:int = event.stageY - mouseDownOrigin ; 
     sp.y = currentPosition - n; 
    } 
+0

ah oui, il y a la logique de mon cerveau avait disparu. lol. merci encore PatrickS. – TheDarkIn1978