0

紛らわしいタイトル、悪い。

基本的に、私は名前のリストを持っています。ループして、ムービークリップを追加し、それに 2 つのプロパティ、名前、および ID を設定します。MovieClip は同時にボタンとして機能するように作成され、4 つのリスナー (マウスのアップ、オーバー、ダウン、またはアウト) を追加します。私はすべての名前でこれを行います。それぞれが設定されている機能は同じです。

例:enemyButton[i].addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

クリックすると、時々「有効なプロパティではありません」と表示されますが、まったくクラッシュしませんが、ボタンを数回押す必要がある場合があります。

私は問題をリスナーに起因するものに絞り込みました。

関数は次のように単純です。

例: function mouseUpHandler(e:MouseEvent):void {enemySelected(e.target.enemyID); }

私の質問は、あまりにも多くのリスナーが問題になる可能性が高いですか? どうすればそれらを減らすことができますか?

ループのスニペットを次に示します。

var C:Class = Class(getDefinitionByName(enemies[i]));
var c:* = new C(); 
c.gotoAndStop(1);
enemyButton[i].enemyID = i;
c.name = "select" + i;
c.enemyID = i;
trace(c.enemyID);
enemyButton[i].addChild(c);
enemyScroll.addChild(enemyButton[i]);
enemyButton[i].enemyName.text = info[i][Const.NAME];
enemyButton[i].setChildIndex(enemyButton[i].getChildByName("enemyName"), enemyButton[i].numChildren-1);

ありがとう。

4

3 に答える 3

0

そんなにスパムを送信するつもりはありませんが、これは簡単に修正できましたが、応答はより良い方法だったかもしれません.

ターゲットをcurrentTargetに変更するだけで、「ボタン」のどこでもクリックできるようになりました。ターゲットがそれに追加されたチャイルドから変化する前に。

それで、解決しました。

助けてくれてありがとう。

于 2013-07-07T05:38:17.227 に答える
0

EnemyButton が MovieClip (おそらく attachMovie で作成) であり、EnemyButton クラスとして厳密に型指定されていない場合、ID プロパティは動的になります。この状況で、名前のリストに誤ったデータが含まれていると (ID フィールドが欠落している可能性があります)、ムービークリップの一部のインスタンスで ID プロパティが未定義のままになります。

動画クリップの生成に使用したデータの一覧を確認できます。データに空白行がある場合、同じエラーが発生する可能性があります。

これは、イベント リスナーとは関係ありません。

于 2013-07-06T09:36:38.810 に答える