0

私の質問に答えてくれてありがとう。問題は、単純な長方形をマウスに追従させることです。このコードが機能しない理由が本当にわかりません。パッケージクラス

{
    import flash.display.MovieClip;
    import flash.display.Stage;

    import flash.events.Event;


    public class watever extends MovieClip
    {
        var stageRef:Stage;

        public function watever(x:Number, y:Number, stageRef:Stage)
        {
            this.x = x;
            this.y = y;
            this.stageRef = stageRef;
            addEventListener(Event.ENTER_FRAME, moveMe, false, 0, true);

        }


        public function moveMe(e:Event):void
        {
            this.x = mouseX;
            this.y = mouseY;

            trace(mouseX);
        }
    }
}

オブジェクトは「奇妙な」場所に移動するだけなので、mouseX をトレースしようとしたところ、出力にばかげた数字が表示されました

-1373
1790
-1373
1790
-1373
1790
-1373
1790
-1373
1790
-1373
1790
-1373

ただし、親クラスから宣言すると正常に動作します。コードのどこが間違っていますか?(以下は、親クラスからの動作です)

public function DocumentClass()
        {


            c = new watever(200, 200, stage)
            stage.addChild(c);
            addEventListener(Event.ENTER_FRAME, loop, false, 0, true);

        }
        private function loop(e:Event):void
        {
            c.x = mouseX;
            c.y = mouseY;
        }
4

1 に答える 1

1

マウスの位置は DisplayObject に対して相対的です (は、より明確にする場合とmouseX同じです)。したがって、ムービークリップがステージ上で (0, 50) にあり、マウスが (0, 60) にある場合、 10 になります。this.mouseXwateverwatever.mouseY

ドキュメント クラスから読み取ると、ステージに相対的に取得されます。mouseXこれmouseYが、正しく動作する理由です。これを行うには、 moveMe() を変更するだけです。

public function moveMe(e:Event):void
{
    this.x = stageRef.mouseX;
    this.y = stageRef.mouseY;
}
于 2013-01-16T00:21:30.657 に答える