2011-10-25 8 views
0

私はこの配列とこれらのイベントハンドラを持っている:AS3 - ムービークリップを含む配列、のindexOf

aBtn、bBtnとcBtnは、MovieClipオブジェクトである
var btnArr:Array = new Array(aBtn, bBtn, cBtn); 
aBtn.addEventListener(MouseEvent.MOUSE_OVER, blah); 
bBtn.addEventListener(MouseEvent.MOUSE_OVER, blah); 
cBtn.addEventListener(MouseEvent.MOUSE_OVER, blah); 

私がしようとするとイベント中に、これらのいずれかのインデックスを取得:

function blah(e:Event) { 
    var i = btnArr.indexOf(e.target); 
    trace(i) 

なぜこのトレースはundefinedたびに返すのですか?

答えて

1

e.currentTargetを使用して、e.targetは一部の子供かもしれません。またはTobiasが言っているように - mouseChildrenをfalseに設定してください。

+0

私はこれらの提案を両方とも実装しましたが、まだ喜んでいません。私は恐れています。 'trace(i)'はまだ 'undefined'に戻ります。 私はまた、これらのような他の痕跡を持っている: 'トレース(E)' 'トレース(e.currentTarget)出力' : '[MouseEventのタイプ= "マウスアウトは"=真解約= falseのeventPhase = 2 localXプロパティ=泡-4 localY = -14 stageX = 103.45 stageY = 35.95 relatedObject = null ctrlKey = false altKey = false shiftKey = false buttonDown = false delta = 0] 'およ​​び ' [object MovieClip] 'それぞれです。 – rbrtl

+0

curretTargetを使用すると問題が解決したようですが、私は今トレースに正しいインデックスを取得しています。どうもありがとう!今扱っていない全く関係のない問題がありました!今夜は解決しなければ私はあなたに保証します。私はそれを掲示します... – rbrtl

0

ここで、ボタンを初期化しますか? MovieClipの名前をトレースしようとしましたか?おそらくあなたのMovieClipにあなたのイベントをディスパッチしている子供たちがいるでしょう。設定しようmouseChildren = false.

+0

私のコード全体をどこかに投稿する方が簡単でしょうか?ボタンはステージ上に描かれたシンボルのインスタンスです。私はクリップ名をトレースしましたが、配列にオブジェクトのインデックスを取得しようとしているので、私にはあまり役立たないようです。私は非常に粘着的な回避策を考えていたが、それはうまくいっていない。 – rbrtl

+0

他のDisplayObjectを子として持つMovieClipにEventListenerを追加すると、イベント自体がシンボルではなくイベントから送出されます。イベントは「バブリング」です。したがって、e.targetはボタン内のDisplayObjectです。これがindexOf関数がundefinedを返す理由です。 turbosqelのようにe.currentTargetを使ってください。現在のターゲットはあなたのボタンです。 EventHandlerを追加したオブジェクト。または、ボタンのmouseChildrenプロパティをfalseに設定します。 –

0

このコードは私のために働きます。私は丁重に0,1,2を得る。
ここでは、MovieClipボタンにインスタンス名aBtn、bBtn、cBtnを与えないと仮定します。
未定義です。 コンパイル時にエラーが発生するはずです。

そして、すべてのキャストをタイプキャストすることをお勧めします。これは長期的に役立ちます。

var i:int = btnArr.indexOf(e.target); 
0

要素を見つけることができない場合、配列のindexOfは-1を返す必要があります。

未定義になっているので、btnArrは前に作成した配列ですか?

関連する問題