以下代码片段是处理 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)stageY
。stageX
evt
例如,第一行的跟踪是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);
}
}
}