【问题标题】:My edge collision algorithm is not working properly我的边缘碰撞算法无法正常工作
【发布时间】:2015-04-29 00:29:02
【问题描述】:
if(pl.y+pl.height >= a.y && pl.x+pl.width >= a.x+1 && pl.x <= a.x+a.width-1 && pl.y<=a.y) { //TOP
    colUP=true;
}
else  colUP=false;

if(pl.y <= a.y+a.height && pl.x+pl.width >= a.x+1 && pl.x <= a.x+a.width-1 && pl.y+pl.height>=a.y+a.height) { //BOTTOM
    colDOWN=true;
}
else colDOWN=false;

if(pl.x <= a.x+a.width && pl.x+pl.width>a.x+a.width && pl.y+pl.height >= a.y && pl.y <= a.y+a.height){ //RIGHT
    colRIGHT=true;
}
else colRIGHT=false;

if(pl.x+pl.width >= a.x && pl.x<a.x && pl.y+pl.height >= a.y && pl.y <= a.y+a.height){ //LEFT
    colLEFT=true;
}
else colLEFT=false;

我设置了一个调试程序,它会告诉我 4 个布尔值中的哪一个被设置为 true,并且当我将框 'pl' 放在框 'a' 的顶部时,它们没有显示 colUP 不等于 true ,并且它们只会在盒子 'pl' 与几个盒子 'a' 碰撞的奇怪情况下实现,并且某一侧的碰撞可能是真实的,但如果 colUP 为真,则 colRIGHT 出于某种原因为真. (这段代码在一个 for 循环中,它遍历一个 Rectangle 数组列表并将当前 Rectangle 设置为等于变量 'a' ,因此 a.x 是框的 x 位置)

【问题讨论】:

  • 请描述您想要发生的事情。视觉效果也会有所帮助。
  • 每个 if 语句检查矩形 1 的一侧是否已通过矩形 2 的另一侧。因此它检查矩形 1 的右侧是否位于矩形 2 左侧的右侧,并且其他方面也一样。我的主要目标是让这种碰撞与我正在创建的马里奥游戏一起工作。所以对于只有顶面碰撞的方块,我可以关闭底、左、右的侧面碰撞。
  • 所以你不想有规律的矩形碰撞?您希望能够测试碰撞发生在哪一侧?
  • 我怀疑这个错误在当前代码块之外。您能否提供更多代码,例如检查所有碰撞的循环?

标签: java algorithm collision-detection


【解决方案1】:

您有正确的逻辑,但您分别为每个条件设置了 false。实际上,所有条件都应该为真。因此,使用一个布尔变量 - isInRectangle=true;然后检查所有条件 - 左、右、上、下。如果任何不正确,则 isInRectangle=false;

这是所有 4 个条件的简单 AND 逻辑运算。

【讨论】:

  • 这是假设目标只是测试真/假是否存在碰撞。该问题的目标似乎是分别检测每个矩形边缘,可能是因为根据与哪些边缘碰撞需要做不同的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
相关资源
最近更新 更多