我这里有两个数组列表,分别包含火箭和弹丸:

public static ArrayList<Projectile> projectiles = new ArrayList<Projectile>();
private static ArrayList<Rocket> rockets = new ArrayList<Rocket>();


时不时地,将射弹和火箭添加到适当的数组列表中:

rockets.add(new NormalRocket(x, -10, 70, 0, 2); // the constructor is (int x, int y, int speed, int dir, int health) but only x and y are relevant.


Rocket和Projectile类都具有以下方法:

public Rectangle bounds() {
    return new Rectangle(x, y, width, height);
}


诸如NormalRocket和MachineGunProjectile之类的子类也具有它:

public Rectangle bounds() {
    return super.bounds();
}


现在,我有一种方法可以像下面这样检查火箭和弹丸之间的碰撞:

private void collision(){
    for(int i = 0; i < rockets.size(); i++){
        for(int j = 0; j < projectiles.size(); j++){
            if(rockets.get(i).bounds().intersects(projectiles.get(j).bounds())){
                System.out.println("HIT!");
            }
        }
    }
}


但是当它们相交时,似乎什么也没有发生。有人知道发生了什么吗,还是需要更多代码来调试?

最佳答案

我会给你一些提示来调试你的问题


尝试画出火箭和弹丸的x,y位置文字。
尝试也绘制边界矩形,以便您可以查看边界矩形是否正确绘制。
通过绘制两个可以相交的矩形并检查输出值来检查相交功能。

关于java - for循环的.intersects()不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19068296/

10-11 05:12