使用布尔数组进行碰撞检测?

时间:2014-01-01 19:23:13

标签: java collision-detection slick2d

我正在尝试为2D游戏编写碰撞检测方法而且我被卡住了。

相遇()方法由传递敌人的玩家以及玩家和敌人的坐标调用。 ImageMask对象有一个2维的布尔数组,对应于精灵的掩码。面具缩放4次,因为精灵是16x16,并在游戏中放大到64x64。

public boolean intersects(ImageMask other, int tx, int ty, int ox, int oy) {
    boolean[][] otherMask = other.getMask();
    if ((tx+mask.length*4<ox)         // This checks if the sprites
            || ty+mask[0].length*4<oy // aren't close to each other.
            || ox+otherMask.length*4<tx
            || oy+otherMask[0].length*4<ty)
        return false;

    //This stuff isn't working.
    for (int i=0;i<mask.length;i++) {
        for (int j=0;j<mask[i].length;j++) {
            for (int k=0;k<otherMask.length;k++) {
                for (int l=0;l<otherMask[k].length;l++) {
                    if ((tx+i*4)<=(ox+k*4) && (tx+i*4+4)>=(ox+k*4)
                            && (ty+j*4)<=(oy+l*4) && (ty+j*4+4)>=(oy+l*4+2)
                            && mask[i][j] && otherMask[k][l]) {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}

效果不佳;有时它按预期工作,但有时它会在实体未触摸时报告冲突,或者在实体彼此重叠时报告冲突。我应该如何解决此问题以使碰撞检测工作?

1 个答案:

答案 0 :(得分:0)

if语句应为

if ((tx+i*4)<=(ox+k*4+4) && (tx+i*4+4)>=(ox+k*4)
        && (ty+j*4)<=(oy+l*4+4) && (ty+j*4+4)>=(oy+l*4+2)
        && mask[i][j] && otherMask[k][l])

另外,看一下项目的其余部分,在初始化ImageMask时你搞砸了x和y。