当我用鼠标点击时,我的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]
答案 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。