Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 ActionScript-鼠标逻辑问题_Actionscript 3_Mouse - Fatal编程技术网

Actionscript 3 ActionScript-鼠标逻辑问题

Actionscript 3 ActionScript-鼠标逻辑问题,actionscript-3,mouse,Actionscript 3,Mouse,愚蠢的问题。不好意思,我还没有找到解决办法。我累了 舞台上的红场。鼠标向下+鼠标向上拖动将向下移动红方块(+y),而鼠标向下+鼠标向下拖动将向上移动红方块(-y)。这种相反的运动是需要的 但是,在鼠标拖动过程中,正方形必须开始从其当前y位置移动,无论有多少鼠标拖动改变了其初始化位置。目前,红方块总是从阶段0开始,因为我的mouseDownOrigin变量不正确,因为我的大脑处于睡眠状态 package { import flash.display.Sprite; import flash.eve

愚蠢的问题。不好意思,我还没有找到解决办法。我累了

舞台上的红场。鼠标向下+鼠标向上拖动将向下移动红方块(+y),而鼠标向下+鼠标向下拖动将向上移动红方块(-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);
        }
    }
}

您需要在MouseUp事件处理程序上记录红方块y的位置,实际上是记录您将方块留在其中的位置

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

啊,是的,这就是我大脑缺失的逻辑。哈哈,再次感谢帕特里克。