1

最近我一直致力于为我的游戏实现一个好的碰撞检测系统。在将它应用到我的游戏中之前,我决定进行一种模拟。我已经学习了很多教程(主要是这个),但我可以让它工作。我一步一步地跟着它,但我不知道我的错误是在重叠(检查两个投影是否重叠)还是在整个代码本身。

该代码也有 Vector2D 和 ConvexPolygon 实现。这是代码:

http://pastebin.com/whV31SDi

它被粘贴在 pastebin 中,因为它很长。

4

3 回答 3

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+应该是全局函数而不是类成员,但比你拥有的更好。

于 2012-09-01T11:07:21.293 回答
0

我认为这与您使用布尔函数来检查是否存在重叠的事实有关。

在你的 for 循环中,每次形状没有重叠时,你都会退出函数,并且 for 循环的每一帧都重新开始,并在同一个地方退出。将其更改为 void 函数。

我可能会弄错,因为我并没有真正彻底阅读所有代码,但我自己也遇到过这个问题。

于 2014-06-17T12:06:27.880 回答
0

这个答案可能有点晚了,但是在查看您的代码之后,您似乎只检查了一个凸多边形的轴。SAT 要求您检查两个形状轴,这很可能是您的问题。要解决此问题,只需对未检查的其他形状轴重复您的碰撞检查。

于 2018-07-09T19:25:21.047 回答