2

簡単な数学の方程式を使った泡が画面の上部から落ちてくるゲームを作成しています。特定の泡を消すには、答えを入力する必要があります。唯一の問題は、答えに対応するバブルを削除できるシステムが必要なことです。Actions-FrameコードとmathBubbleASクラスを使用しています。最初にフレームコードを表示します。

stop();
var cooldown:int = 200;
var cooldownMax:int = 200;
inputAnswer.restrict = "^A-Za-z";
addEventListener(Event.ENTER_FRAME, bubbleSpawn);

function bubbleSpawn(e:Event) {

    if (cooldown>cooldownMax) {
        var bubble = new mathBubble();
        addChild(bubble);
        bubble.x = Math.round(Math.random()*480);
        bubble.y = 0;
        cooldown = 0;
    }

    cooldown += 1;

}

package {

    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.text.*;

    public class mathBubble extends MovieClip {

        var firstInteger:int;
        var equationSymbol:int;
        var secondInteger:int;
        var mathAnswer:int;
        var firstSpace:String;
        var secondSpace:String;
        var mathAnswerString:String;

        function mathBubble() {
            firstInteger = Math.round(Math.random()*9);
            equationSymbol = Math.round(Math.random()*2)+1;
            secondInteger = Math.round(Math.random()*9);

            trace("bubble spawned");

            firstSpace = String(firstInteger);
            secondSpace = String(secondInteger);
            firstNumber.text = firstSpace;
            secondNumber.text = secondSpace;

            if (equationSymbol==1) {
                mathSymbol.text = "+";
                mathAnswer = firstInteger+secondInteger;
                mathAnswerString = String(mathAnswer);
                trace(mathAnswerString);
            }
            if (equationSymbol==2) {
                mathSymbol.text = "-";
                mathAnswer = firstInteger-secondInteger;
                mathAnswerString = String(mathAnswer);
                trace(mathAnswerString);
            }

            if (equationSymbol==3) {
                mathSymbol.text = "x";
                mathAnswer = firstInteger*secondInteger;
                mathAnswerString = String(mathAnswer);
                trace(mathAnswerString);
            }

            addEventListener(Event.ENTER_FRAME, bubbleFall);
            function bubbleFall(e:Event) {
                y += 1;
            }
        }
    }
}

コードを読む必要はありません。配列を使用して、変数「mathAnswer」と「mathAnswerString」を介して各子に含まれるランダム化された回答と同じ回答ですべての子を削除する方法を誰かが説明できるかどうか疑問に思っていました。これがどのように機能するかですが、他に方法がある場合は、そのように言ってください。ここまで読んでいただきありがとうございます。

4

1 に答える 1

1

answerプロパティでCustomEventを使用できます。回答が与えられた後、その回答を含むイベントをディスパッチすると、各バブルは自分の回答と照合できます。

文字列が同一の場合は、バブルに削除関数を実装する必要があります。この関数では、すべてのイベントリスナーを削除し、最後に親が子を削除します。

イベントをディスパッチしてリッスンするには、各バブルへのパラメーターとしてイベントディスパッチャーを渡すことができます。

子供が自分自身を削除するために:

    if(this.parent != null )
       this.parent.removeChild( this );

y位置が50を超えた後に子が自分自身を削除する場合、各バブルにフレーム入力イベントリスナーを実装する必要があるため、子が自分自身を削除することがより良い解決策になるかどうかはわかりません...コンテナ内の単一のイベントリスナーですべてのバブルをチェックする方が効率的です。

于 2011-11-25T02:39:49.283 に答える