【问题标题】:[AS3]Using arrays to delete a specific child[AS3]使用数组删除特定的孩子
【发布时间】:2011-11-25 02:16:22
【问题描述】:

我正在创建一个游戏,其中带有简单数学方程式的气泡从屏幕顶部落下,您必须输入答案才能使特定气泡消失。唯一的问题是我需要一个可以删除与答案相对应的气泡的系统。我正在使用 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”包含的随机答案相同 我认为数组将是它的工作方式,但如果有任何其他方式,请说出来。感谢您阅读本文。

【问题讨论】:

    标签: arrays actionscript-3 removechild


    【解决方案1】:

    您可以将 CustomEvent 与 answer 属性一起使用。在给出答案后,发送一个带有答案的事件,然后每个气泡都可以检查自己的答案。

    如果字符串相同,则需要在气泡中实现删除函数,在其中删除所有事件侦听器,最后父级删除子级。

    要分派和监听事件,您可以将事件分派器作为参数传递给每个气泡。

    让孩子自行移除:

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

    至于孩子在 y 位置大于 50 后自行移除,我不确定让孩子自行移除会是更好的解决方案,因为您必须在每个气泡中实现一个输入帧事件侦听器......在容器中使用单个事件侦听器检查所有气泡可能会更有效。

    【讨论】:

    • 感谢您的回答,但您认为您能向我解释一下如何让孩子专门移除自己吗?就像在任何情况下一样,如果我希望它在 y 大于 50 后自行移除(出于测试目的)
    • if(y > 50){ if(this.parent){ this.parent.removeChild(this) } }
    • 不是,真的。无论如何,您都需要遍历每个气泡,您可以使用 ENTER_FRAME(最佳 OOP 方式)或仅在主类上循环。
    猜你喜欢
    • 2011-09-01
    • 2013-08-11
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多