2

以下代码片段是处理 a 的事件处理程序MouseEvent.CLICK

trace("me stageX:"+evt.stageX+" stageY:"+evt.stageY);
var placeX:int = evt.stageX-EasingWithMouse.CELL_WIDTH/2;
var placeY:int = evt.stageY-EasingWithMouse.CELL_HEIGHT/2;
stage.addChild(this);
this.x = placeX;
this.y = placeY;
trace("me stageX:"+evt.stageX+" stageY:"+evt.stageY);

我遇到的问题是触发事件的对象移动后的更改属性(通过更改 x 和 y)stageYstageXevt

例如,第一行的跟踪是stageX:130 stageY:150. 这在 x 上移动 0,在 y 上移动 -30。最后一行的跟踪现在报告stageX:130 stageY:120.

更复杂的是,新的 evt.stageX 和 evt.stageY 通过事件链的其余部分传播。

这是我应该期待的吗?

我问是因为参考文件说:

[只读] 事件发生的水平坐标在全局舞台坐标中。

但我没有在全局范围内修改任何内容。

这是一个按要求提供的快速而肮脏的完整示例:

Main.as 文件:

package{
    import flash.display.*;
    import flash.ui.Mouse;
    import flash.events.*;

    public class Main extends Sprite{
        private var container:Sprite = new red1();//red1 is a symbol
        private var target:Sprite = new testreg1();//testreg1 is a symbol

        public function Main(){
            stage.addChild(container);
            container.x = 100;
            container.y = 100;
            container.addChild(target);
        }
    }
}

testreg1.as 文件

package{
    import flash.display.*;
    import flash.ui.Mouse;
    import flash.events.*;

    public class testreg1 extends MovieClip{
        public function testreg1(){
            addEventListener(MouseEvent.CLICK,meClick);
        }

        public function meClick(evt:MouseEvent):void{
            trace("target stageX:"+evt.stageX+" stageY:"+evt.stageY);
            var placeX:int = evt.stageX-50;
            var placeY:int = evt.stageY-50;
            stage.addChild(this);
            this.x = placeX;
            this.y = placeY;
            trace("target stageX:"+evt.stageX+" stageY:"+evt.stageY);
        }
    }
}
4

0 回答 0