Actionscript 3 stageX随着目标位置的变化而变化?
以下代码段是处理Actionscript 3 stageX随着目标位置的变化而变化?,actionscript-3,events,mouseevent,Actionscript 3,Events,Mouseevent,以下代码段是处理MouseEvent的事件处理程序。单击: 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 = p
MouseEvent的事件处理程序。单击:
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),evt的stageY
和stageX
属性会发生更改
例如,第一行的跟踪是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);
}
}
}
我认为这与你在舞台外放置东西有关。我试图通过设置不同的对齐模式和缩放模式来重现这个问题,但没有成功。这不可能。当我读取evtents stageX和stageY变量时,它们在同一个函数中总是相同的。你必须发布更多的代码,这些代码真的来自同一个函数吗?难道不是stage.addChild(this)
冗余吗?如果是的话,那就是你的问题了,你正在移动事件的目标,这会自然而然地移动所有的东西。懒惰的解决方案是克隆你的evt,停止传播,并发送新克隆的evtMouseEvent@MartonPallagi不,这不是多余的。我故意将物体从容器中移出,并将其直接放在舞台上。我不确定人们是否应该期望与活动相关的财产会在中途发生变化。事件不应该捕获特定时间点的状态,而不管目标在之后发生了什么?我不确定,我能看到问题的两面。我通过捕获stage.mouseX
和stage.mouseY