我试图记录每次我的精灵相互碰撞时的情况。不幸的是,我当前的解决方案似乎给计数增加了更多的冲突,我不明白为什么。
我尝试了许多不同形式的碰撞跟踪,但最终都遭受了相同的缺陷:它们计算未发生的碰撞。如果没有发生碰撞,我当前的解决方案将计算10次碰撞,这比以前的方法要准确得多,但不够准确。
这是我用来检查碰撞的矩形:
public Rectangle getBounds() {
if (rotate){
return new Rectangle((int) x, (int) y, 60, 40);
}else{
return new Rectangle((int) x, (int) y, 40, 60);
}
}
这是我使用.intersects的crashCheck()方法:
Rectangle r2 = null;
public void checkCollisions(){
for (Iterator<SimpleSprite> it = Carpaint.Cars.iterator(); it.hasNext();) {
Carpaint c = (Carpaint) it.next();
if (c.dx > 0 || c.dy > 0){
Rectangle r1 = c.getBounds();
System.out.println(r1);
if (r2 != null){
if (r1.intersects(r2) && r2.intersects(r2)){
Carpaint.collisions ++;
System.out.println("Car r1: " + r1 + "collided with Car r2" + r2);
}
}
r2 = r1;
System.out.println(r2);
}
}
}
每隔50毫秒调用一次
public void actionPerformed(ActionEvent arg0) {
checkCollisions();
当我运行程序3秒钟时,我看不到应该发生任何事情,但是每次测试时,我都会得到10个或更多的结果。我该如何解决?
编辑: 更改了代码以修复错误;现在是
if (r1.intersects(r2) && r2.intersects(r1)){
但是结果仍然相同