最近我一直致力于为我的游戏实施一个好的碰撞检测系统。在将其应用到我的游戏中之前,我决定进行一种模拟。我已经学过很多教程(主要是this one),但我可以使用它。我一步一步地跟着它,但我不知道我的错误是在重叠(检查两个投影是否重叠)或整个代码本身。
代码也有Vector2D和ConvexPolygon实现。 这是代码:
它粘贴在pastebin中,因为它很长。
答案 0 :(得分:1)
好吧,你说代码很长,而且我没有全部通过。但两个错误突然出现
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+
这样的对称运算符应该是全局函数而不是类成员,但比你拥有的更好。
答案 1 :(得分:0)
我认为这与您使用bool-function检查是否存在重叠这一事实有关。
在你的for循环中,每次形状没有重叠时退出函数,for循环的每一帧都重新开始,并在同一个地方退出。将其更改为无效功能。
我可能会弄错,因为我并没有彻底阅读所有代码,但我自己也遇到过这个问题。
答案 2 :(得分:0)
这个答案可能有点晚了,但是在看完代码之后,似乎您只在检查一个凸多边形的轴。 SAT要求您同时检查两个形状轴,这很可能是您遇到的问题。要解决此问题,只需对未选中的其他形状轴重复碰撞检查。