3


フラッシュ + アクション スクリプトを使用して単純なカード マッチング ゲームを作成しようとしていますが、イベント リスナーと名前の割り当てに大きな問題があります。すべてのカード生成ステートメントが用意されており、それらはすべてステージに描画されますが、インスタンス名に newCard.name を割り当てても、クリックをトレースするときに取得する名前は、すべてのボタンで常に「root1」です。理由がわかりません。

package  {
import flash.display.MovieClip;
import flash.events.MouseEvent;

public dynamic class cardGameMain extends MovieClip {

    public function cardGameMain() {
        addCards();
    }
    public function addCards() {
        var lastCard:int;
        for (var i = 1; i < 17; i++) {
            var newCard:MovieClip;
            newCard = new cardBackSymbol();
            newCard.name = "card" + i;
            addChild(newCard);
            newCard.addEventListener(MouseEvent.MOUSE_UP, decideCard);
            if (i == 1 || i == 5 || i == 9 || i == 13) {
                newCard.x = 20;
                if (i == 1) {
                    newCard.y = 20;
                }
                else if (i == 5) {
                    newCard.y = 240;
                }
                else if (i == 9) {
                    newCard.y = 460;
                }
                else if (i == 13) {
                    newCard.y = 680;
                }
                lastCard = 20;
            } else if (i > 1 && i < 5) {
                newCard.x = lastCard + 145;
                newCard.y = 20;
                lastCard = lastCard + 145;
            } else if (i > 5 && i < 9) {
                newCard.x = lastCard + 145;
                newCard.y = 240;
                lastCard = lastCard + 145;
            } else if (i > 9 && i < 13) {
                newCard.x = lastCard + 145;
                newCard.y = 460;
                lastCard = lastCard + 145;
            } else {
                newCard.x = lastCard + 145;
                newCard.y = 680;
                lastCard = lastCard + 145;
            }
            trace(newCard.name + " position is " + newCard.x + ", " + newCard.y);
        }
    }

    public function decideCard(e:MouseEvent):void {
        trace(this.name)
    }
}

}

この問題に関するヘルプは大歓迎です!

4

1 に答える 1

1

thisクリックされたオブジェクトではなく、含まれているクラスを参照しているキーワードを使用しています。

代わりにこれを試してください:

public function decideCard(e:MouseEvent):void {
    trace(DisplayObject(e.currentTarget).name)
}
于 2012-11-05T21:32:19.800 に答える