2010-11-22 6 views
0

dummes Problem. peinlich, dass ich keine Lösung gefunden habe. Ich bin müde.ActionScript - Mauslogik Problem

ein rotes Quadrat auf der Bühne. Maus-Abwärtspfeil + Maus-Hochziehen verschiebt das rote Quadrat nach unten (+ y), während Maus-Abwärtspfeil + Maus-Abwärtspfeil das rote Quadrat nach oben bewegt (-y). diese entgegengesetzte Bewegung ist erwünscht.

während einer Mausbewegung muss das Quadrat jedoch von der aktuellen y-Position aus beginnen, unabhängig davon, wie viele Mausbewegungen die initialisierte Position geändert haben. Momentan beginnt das rote Quadrat immer bei Stufe 0, da meine Variable mouseDownOrigin inkorrekt ist, weil mein Gehirn schläft.

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

Antwort

2

Sie müssen das rote Quadrat y-Position auf dem MouseUp Event-Handler erfassen, praktisch die Position der Aufnahme können Sie den Platz verlassen.

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 ja, gibt es die Logik mein Gehirn fehlte. lol. Danke nochmal PatrickS. – TheDarkIn1978