垂直和水平移动的不同MOUSE_OUT行为?
MOUSE_OUT
显然,离开Sprite时X和Y鼠标移动的处理方式不同。垂直和水平移动的不同MOUSE_OUT行为?
我该如何解决这个问题或者解决它?这在哪里记录?
MOUSE_OUT
时发生x==0
,但不是y==0
(你需要去y==-1
):
private var _sp:Sprite;
public function test():void
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
_sp = new Sprite();
_sp.graphics.beginFill(0xFF0000, 1);
_sp.graphics.drawRect(0, 0, 15, 15);
_sp.graphics.endFill();
_sp.x = 10;
_sp.y = 10;
_sp.alpha = 1;
addChild(_sp);
_sp.addEventListener(MouseEvent.MOUSE_MOVE, msMvCb, false, 0, true);
_sp.addEventListener(MouseEvent.MOUSE_OUT, msOutCb, false, 0, true);
}
private function msMvCb(evt:MouseEvent):void
{
traceMousePos("mv", evt);
_sp.alpha = 1;
}
private function msOutCb(evt:MouseEvent):void
{
traceMousePos("out", evt);
_sp.alpha = .5;
}
private function traceMousePos(note:String, evt:MouseEvent):void
{
trace(note + " -- " + evt.localX + ", " + evt.localY + ", " + evt.stageX + ", " + evt.stageY);
}
这里是直线向上移动,与MOUSE_OUT
在-1痕迹......
mv -- 7, 3, 17, 13
mv -- 7, 2, 17, 12
mv -- 7, 1, 17, 11
mv -- 7, 0, 17, 10
out -- 7, -1, 17, 9
这里是一条直线向左移动的轨迹,MOUSE_OUT
在0 ...
mv -- 3, 7, 13, 17
mv -- 2, 7, 12, 17
mv -- 1, 7, 11, 17
out -- 0, 7, 10, 17
编辑
与MOUSE_ENTER会发生同样的错误行为。
我不是专家,但看起来像一些错误,我也试着用ROLL_OVER也做同样的事情,也作为一个明显的事情,如果你把框放在0,0有一个小的1px边框舞台的顶部,当它在上面时也显示为-1。
“修复”这种行为的一种方法是让Sprite的子类侦听它的所有MOUSE_MOVE,MOUSE_OUT和MOUSE_ENTER事件。在检查每个事件时,决定是否让它像平常一样传播,完全停止它,或派发一种符合你想要的行为的新类型的事件应该是相对直接的。例如,可以侦听MOUSE_MOVE,并且如果y == 0,则分派新的MOUSE_OUT事件(并且如果y == -1则阻止任何后续的冗余事件)。
这是一个好主意,但是...当mouseY == 0时,鼠标仍然在视觉上在精灵中。捕获并调用我自己的mouseOut然后可能会在技术上解决此问题,但视觉行为将关闭。 – jedierikb 2010-03-02 02:50:45
是的,这种错误的行为也发生在ROLL_OVER上,但我无法重现您描述的视觉效果。 – jedierikb 2010-03-02 02:10:25