为什么我的程序计数了太多的冲突?

时间:2019-05-10 16:56:33

标签: java sprite collision

我试图记录每次我的精灵相互碰撞时的情况。不幸的是,我当前的解决方案似乎给计数增加了更多的冲突,我不明白为什么。

我尝试了许多不同形式的碰撞跟踪,但最终都遭受了相同的缺陷:它们计算未发生的碰撞。如果没有发生碰撞,我当前的解决方案将计算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)){

但是结果仍然相同

0 个答案:

没有答案