[AS3] Использование массивов для удаления конкретного потомка - PullRequest
2 голосов
/ 25 ноября 2011

Я создаю игру, в которой пузырьки с простыми математическими уравнениями падают с верхней части экрана, и вы должны ввести ответ, чтобы конкретный пузырь исчез.Единственная проблема заключается в том, что мне нужна система, которая может удалять пузырьки, соответствующие ответу.Я использую код Actions-Frame и класс mathBubble AS.Сначала я покажу код кадра.

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" я полагал, что массивы будут такими, как это будет работать, но если есть какой-то другой путь, то, пожалуйста, так и скажите.Спасибо, что прочитали это далеко.

1 Ответ

1 голос
/ 25 ноября 2011

Вы можете использовать CustomEvent со свойством answer. После того, как дан ответ, отправьте событие с ответом, каждый пузырь может проверить свой ответ.

Если строки идентичны, вам нужно реализовать функцию удаления в пузыре, где вы удаляете все прослушиватели событий и, наконец, родитель удаляет дочерний элемент.

Для отправки и прослушивания события вы можете передать диспетчер событий в качестве параметра каждому пузырю.

Для ребенка, чтобы удалить себя:

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

Что касается дочернего удаления самого себя после того, как его позиция y больше 50, я не уверен, что удаление дочернего элемента было бы лучшим решением, так как вам нужно было бы реализовать прослушиватель события enter frame в каждом пузыре ... может быть более эффективно иметь в контейнере один прослушиватель событий, проверяющий все пузырьки.

...