Flash Sprite失去了对MOUSE_DOWN事件的关注

时间:2011-01-15 14:20:11

标签: flex flash actionscript-3

当我用鼠标点击时,我的Sprite课程一直失去焦点 - 特别是在MOUSE_DOWN事件之后(点击完成之前)。

我已经将mouseEnabled设为假,但没有变化。我为FOCUS_OUT添加了一个监听器,并注意到FocusEvent.relatedObject属性为NULL,这让我感到困惑 - 这是不是意味着没有新的焦点目标,焦点只是迷失了?

通过跟踪它们获得的事件的确切顺序,我点击:

[FocusEvent type="focusOut" bubbles=true cancelable=false eventPhase=2 relatedObject=null shiftKey=false keyCode=0]
[MouseEvent type="mouseDown" bubbles=true cancelable=false eventPhase=2 localX=355 localY=362 stageX=360 stageY=367 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=true delta=0])
[MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=355 localY=362 stageX=360 stageY=367 relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0]

2 个答案:

答案 0 :(得分:2)

尝试在精灵上设置mouseChildren = false;,而不是在孩子身上设置mouseEnabled = false;。如果精灵的孩子的mouseEnabled设置为false,则精灵中包含的所有可见元素都不会被点击,除了直接在其自己的图形中绘制的形状。然后,您实际上会点击“穿过”孩子们和舞台上。

[编辑]:

我已经创建了一个测试来重现您的问题。你是对的 - 当点击一个精灵时,焦点会被神秘地丢失,即使人们希望这实际上将焦点放在它上面。 MovieClip也是如此,但TextFields则不然。尽管可能不实用,但您可以通过添加自定义mouseDown处理程序来解决它:

private function onMouseDown (ev:Event) : void {
    if (stage.focus != sprite) stage.focus = sprite;
}

答案 1 :(得分:0)

如果您延长任何InteractiveObject,则必须设置tabEnabled = true;。这将使您点击的对象获得焦点。

小心但是: 如果 tabEnabled为false ,但 mouseChildren为true ,则stage.focus将设置为null。