现在,我们正在编写一个射击游戏,您将在其中扮演一架飞机的任务,当然,它的任务是射击敌人。我们有两种不同的阶级,一种是子弹,另一种是敌人。我们在检查这两个元素是否相互冲突方面遇到麻烦。

我们已经尝试比较这两个元素的x坐标和y坐标,但这似乎没有用。

void hit() {
    for(int i = 0; i < Bullet.size(); i++) {
        Bullet bullet = (Bullet) Bullet.get(i);
        Enemy enemy = (Enemy) enemies.get(i);
        if(bullet.x < enemy.x + enemy.l
           && enemy.x > enemy.x - enemy.l
           && enemy.y < bul.y) {
            enemy.health -= 1;
            println("Hit");
            if(enemy.health <= 0) {
                enemy = null;
                // enemies.remove(i);
            }
        }
    }
}


bul是子弹的数组列表,enm是敌人的列表

最佳答案

问题是检查碰撞时只有一个for-loop。因此,您实际上是在检查#1子弹是否击中了#1敌人。您将需要两个for-loop来针对每个敌人检查每个子弹。

void hit() {

    for(int i = 0; i < Bullet.size(); i++)
    {
        Bullet bul = (Bullet) Bullet.get(i);

        for(int j=0; j<enemies.size(); j++){
            Enemy enm = (Enemy)enemies.get(j);
            if(bul.x < enm.x + enm.l && bul.x > enm.x - enm.l && enm.y<bul.y)
            {
                enm.health -= 1;
                println("Hit");
                if(enm.health <= 0)
                {
                  enm = null;
                //  enemies.remove(i);
                }
            }
        }
    }
}

关于java - 您如何知道不同数组列表中的两个元素是否冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55470933/

10-11 03:40
查看更多