2011-01-15 9 views
0

私のマウスでクリックすると、具体的にはMOUSE_DOWNイベントの後(クリックが完了する前)にフォーカスが失われます。Flash 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

この短い例を投稿できますか? – greggreg

+0

何が好きですか?それはファイルの全体の束である私のアプリの一部です。スプライトはマスクを設定する以外に特別なことはありません。 –

+0

あなたのステージはおそらく焦点を当てていますか?たぶんstage.mouseEnabled = falseかもしれません。 – jpea

答えて

2

は、スプライトの代わりに、子どもたちにmouseEnabled = false;mouseChildren = false;を設定してみてください。スプライトの子のmouseEnabledfalseに設定されている場合、スプライトに含まれる表示可能な要素はクリックできません。ただし、独自のグラフィックスで直接描画されるシェイプは例外です。あなたは実際に子供たちの "スルー"とステージ上をクリックします。

[EDIT]:

私はあなたの問題を再現するテストを作成しました。あなたは正しい - スプライトがクリックされると、実際にフォーカスを当てると予想されるにもかかわらず、フォーカスは不思議に失われます。同じことがMovieClipsでは当てはまりますが、TextFieldでは当てはまりません。あなたがtabEnabled = true;を設定する必要が任意のInteractiveObjectを拡張する場合

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

Hmm。私はそれを試みたが、変化はなかった。参照のためにSpriteはフルサイズのSpriteを1つ描画してクリックするようにしていますが、それはすべてです - 子を追加することを無効にしました。背景の矩形の上で敵をクリックするだけです。 Sprite.graphics.drawRectangleを使用して描画します –

+0

これを再現して、あなたに連絡してみます。 – weltraumpirat

+0

私はついにこれをテストしました。私は私の答えを編集しました。 – weltraumpirat

0

:それは非現実的かもしれないが、あなたは、カスタムのmouseDownハンドラを追加することで回避することができます。これは、あなたのクリックに基づいて、オブジェクトの利得に焦点を当てます。

は、しかし注意してください:tabEnabledのは偽が、mouseChildrenが真である 場合、に、Stage.focusがnullに設定されます。

関連する問題