有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

所以我在做一个有一波又一波敌人的游戏。Wave类包含一个更新方法,该方法更新Wave类中包含的敌人数组列表中的所有敌人。Wave类还有一个名为beat的布尔值,它决定玩家是否击败了当前Wave。然而,我现在一直在尝试在球员击败第一个之后开始下一个浪潮。除了第一个,arraylist中的所有波都以其节拍变量为真开始。目前只有两波。我不知道这为什么不起作用。谢谢你的帮助

    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) 个答案

  1. # 1 楼答案

    在将当前波形的beat设置设置为false后,循环将i增加到下一个波形,并错过调用该情况下的update方法。看起来您应该在设置beat = false之后立即调用它的update方法,或者按照如下相反的顺序执行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

  2. # 2 楼答案

    我不确定我是否理解你的代码,但我可以告诉你两件事。首先,循环永远不会循环,因为一旦索引为1,它就结束了,不会再次执行代码。其次

     if(i-1 != -1)
                {
                    if(w.get(i-1).beat && w.get(i).beat)
                    {
                        w.get(i).beat = false;
                    }
                }
    

    由于我所说的,他总是错的