最近我一直致力于为我的游戏实现一个良好的碰撞检测系统。在将其应用到我的游戏中之前,我决定进行某种模拟。我遵循了许多教程(主要是 this one ),但我可以让它工作。我是一步一步跟着做的,但我不知道我的错误是在重叠部分(检查两个投影是否重叠)还是在整个代码本身。
该代码还具有 Vector2D 和 ConvexPolygon 实现。 这是代码:
因为比较长,所以粘贴到pastebin中。
最佳答案
你说的代码很长,我没有全部看完。但是出现了两个错误
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+
这样的对称运算符应该是全局函数而不是类成员,但比你拥有的要好。
关于c++ - 使用分离轴定理的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12227153/