gpt4 book ai didi

java - 使用 boolean 数组进行碰撞检测?

转载 作者:太空宇宙 更新时间:2023-11-04 15:15:40 25 4
gpt4 key购买 nike

我目前正在尝试为 2D 游戏编写碰撞检测方法,但遇到了困难。

intersects()方法是由玩家经过敌人时调用的,以及玩家和敌人的坐标。 ImageMask 对象有一个对应于 Sprite 掩码的二维 boolean 数组。由于 Sprite 大小为 16x16,并且在游戏中放大到 64x64,因此 mask 缩放了 4 倍。

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;
}

这不太好用;有时它会按预期工作,但有时它会在实体未接触时报告碰撞,或者在实体彼此重叠时报告碰撞。我应该如何解决这个问题以使碰撞检测起作用?

最佳答案

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。

关于java - 使用 boolean 数组进行碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20872319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com