ActionScript - 鼠标逻辑问题

发布于 2024-10-03 20:45:43 字数 1372 浏览 0 评论 0原文

愚蠢的问题。很尴尬我还没有找到解决办法。我累了。

舞台上有一个红色方块。鼠标按下 + 鼠标拖动会将红色方块向下移动 (+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);
        }
    }
}

dumb problem. embarrassed that i haven't found a solution. i'm tired.

a red square in on the stage. mouse-down + mouse-drag-up will move the red square downward (+y), while mouse-down + mouse-drag-down will move the red square upward (-y). this opposite motion is desired.

however, during a mouse drag the square must begin moving from it's current y position, regardless of how many mouse drags have changed it's initialized position. currently, the red square will always begin at stage 0, since my mouseDownOrigin variable is incorrect because my brain is asleep.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清欢 2024-10-10 20:45:43

您需要在 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;
   }

You need to record the red square y position on the MouseUp event handler, practically recording the position you leave the square in.

   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;
   }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文