最近,我一直在为我的游戏实现一个良好的碰撞检测系统。在将其应用于我的游戏之前,我决定进行一种模拟。我跟着很多教程(主要是this one),但我可以让它工作。我一步步跟着它,但我不知道我的错误是否在重叠(检查两个投影重叠)还是整个代码本身。使用分离轴定理的碰撞检测
该代码也有Vector2D和ConvexPolygon实现。 下面的代码:
它在引擎收录粘贴,因为它是相当长的。
最近,我一直在为我的游戏实现一个良好的碰撞检测系统。在将其应用于我的游戏之前,我决定进行一种模拟。我跟着很多教程(主要是this one),但我可以让它工作。我一步步跟着它,但我不知道我的错误是否在重叠(检查两个投影重叠)还是整个代码本身。使用分离轴定理的碰撞检测
该代码也有Vector2D和ConvexPolygon实现。 下面的代码:
它在引擎收录粘贴,因为它是相当长的。
那么你说的代码是相当长的,我没有经历这一切。但两个错误伸出
1)你operator-
是向后
Vector2D& operator - (const Vector2D& other)
{
Vector2D resultant;
resultant = Vector2D(other.x - this->x,other.y - this-> y);
return resultant;
}
应该
Vector2D& operator - (const Vector2D& other)
{
Vector2D resultant;
resultant = Vector2D(this->x - other.x, this->y - other.y);
return resultant;
}
2)有大量的作风问题与您的代码。最大的一个是通过引用局部变量返回所有的值。这只是要求麻烦,因为函数返回后该变量不再存在。这里是写你operator+
例如
Vector2D operator+ (const Vector2D& other) const
{
return Vector2D(other.x + this->x, other.y + this->y);
}
还不够完善,更好的办法,因为对称的运营商如operator+
应该是全球性的功能不是类的成员,但比你有什么更好的。
是的..你是明确的权利,但问题仍然存在.. –
@EdoardoTygerDominici嗯,我不太了解碰撞检测,但是这不是一个问题,你的第二个多边形是不凸的?你提到的教程说这个算法只适用于凸形。事实上有些人会说第二个多边形根本就不是多边形,因为它的边是交叉的。 – john
我认为它与你使用bool函数检查是否有重叠有关。
在for循环中,每次形状没有重叠时,都会退出该函数,for循环的每一帧都会重新开始,然后在同一个地方退出。将其更改为void函数。
我可能被误认为是因为我没有真正阅读所有代码,但我自己也遇到了这个问题。
在问题标题中扩展缩略词总是一个两难的问题 - 也必须简短 - 但Google比赛表明,对于大多数计算机科学家来说,SAT可能会引发布尔可满足性问题。 http://en.wikipedia.org/wiki/Boolean_satisfiability_problem –