тупая проблема. смутился, что я не нашел решение. я устал.
красный квадрат на сцене. mouse-down + mouse-drag-up переместит красный квадрат вниз (+ y), а mouse-down + mouse-drag-down переместит красный квадрат вверх (-y). это противоположное движение желательно.
однако, при перетаскивании мышью квадрат должен начать двигаться с его текущей позиции y, независимо от того, сколько перетаскиваний мыши изменили свою начальную позицию. в настоящее время красный квадрат всегда начинается на стадии 0, поскольку моя переменная mouseDownOrigin неверна, потому что мой мозг спит.
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);
}
}
}