所以我正在制作一个有敌人浪潮的游戏。 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;
}
}
}
}
答案 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
因为它们真的还没有被击败呢?