我的Java代码不会产生下一波?

时间:2015-05-15 17:45:47

标签: java loops arraylist

所以我正在制作一个有敌人浪潮的游戏。 Wave类包含一个更新方法,用于更新Wave类中包含的敌人的arraylist中的所有敌人。 Wave类还有一个名为beat的布尔值,用来决定玩家是否击败了当前的wave。我现在一直在尝试在玩家击败第一波之后开始下一波。除了第一个之外,arraylist中的所有wave都以其beat变量开始为真。目前只有两波。我不知道为什么这不起作用。谢谢你的帮助。

    for(int i = 0; i < 1;i++)
    {
        if(!w.get(i).beat)
            w.get(i).update(g2d);
        else if(w.get(i).beat)
        {
            if(i-1 != -1)
            {
                if(w.get(i-1).beat && w.get(i).beat)
                {
                    w.get(i).beat = false;
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

我不确定我理解你的代码,但我可以告诉你两件事。首先,你的循环永远不会循环,因为只要索引为1,它就会在不再执行代码的情况下结束。其次

<PreprocessorDefinitions Condition="'$(SolutionName)'=='NameOfYourSolution'">
    YOUR_DEFINITION;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
由于我说的话,

总是假的。

答案 1 :(得分:1)

在将当前wave i设置为beat之后,您的循环会将false增加到下一个wave,并且错过调用update方法案件。看起来您应该在设置update后立即调用beat = false方法,或者以相反的顺序执行if测试,如下所示:

for(int i = 0; i < numWaves;i++) // upper range should be the number of waves
{
    if(w.get(i).beat)
    {
        if(i>0)   // this can be simplified to "if (i>0)"
        {
            if(w.get(i-1).beat)  // no need to check w.get(i).beat here
            {
                w.get(i).beat = false;
            }
        }
    }
    else 
        w.get(i).update(g2d);
}

我不知道你为什么要将wave beat状态初始化为true,然后在轮到它时将其设置为false。为什么不将所有内容初始化为false因为它们真的还没有被击败呢?