我正在尝试为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;
}
效果不佳;有时它按预期工作,但有时它会在实体未触摸时报告冲突,或者在实体彼此重叠时报告冲突。我应该如何解决此问题以使碰撞检测工作?
答案 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。