我试图用两个使用图形包构造的矩形来实现2D碰撞检测。 不幸的是,我开始认为我不明白编写一个处理这个问题的函数所需的逻辑。C++ 2D多边形碰撞检测
下面是我的代码,它绘制了一个小精灵和其他几个矩形。我的精灵随着键盘输入而移动。
我已经使用了几本书,也尝试过像Nehe等网站,虽然它们是非常好的教程,但它们似乎只是直接处理3D碰撞。
有人可以告诉我一个有效的方法来实现碰撞检测使用我上面的矩形?我知道你需要比较每个对象的坐标。我只是不确定如何跟踪对象的位置,检查碰撞并在碰撞时停止移动。
我是自学的,现在似乎已经停了几天。我完全没有想法,并且搜索了更多的谷歌网页,而不是我想要记住的。我很抱歉我的天真。
我会很感激任何有建设性的意见和示例代码。谢谢。
void drawSprite (RECT rect){
glBegin(GL_QUADS);
glColor3f(0.2f, 0.2f, 0.2f);
glVertex3f(rect.x, rect.y, 0.0);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(rect.x, rect.y+rect.h, 0.0);
glColor3f(0.2f, 0.2f, 0.2f);
glVertex3f(rect.x+rect.w, rect.y+rect.h, 0.0);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(rect.x+rect.w, rect.y, 0.0);
glEnd();
}
void drawPlatform (RECT rect){
glBegin(GL_QUADS);
glColor3f(0.2f,0.2f,0.0f);
glVertex3f(rect.x, rect.y, 0.0);
glColor3f(1.0f,1.0f,0.0f);
glVertex3f(rect.x, rect.y+rect.h, 0.0);
glColor3f(0.2f, 0.2f, 0.0f);
glVertex3f(rect.x+rect.w, rect.y+rect.h, 0.0);
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(rect.x+rect.w, rect.y, 0.0);
glEnd();
}
在网上搜索“2D碰撞检测”会带来很多教程。你能描述一下为什么这些不适合你? – 2013-03-20 14:03:22
我猜是因为我不理解他们。也许我读了太多,让自己感到困惑。我认为我出错的地方是我不是100%确定如何跟踪精灵的当前位置,因此我认为我总是比较精灵的起源x/y,当然这些精灵始终会返回为假碰撞... – Reanimation 2013-03-20 14:12:43
您可能需要将您的问题细化为您正在尝试的特定“第一步”。也许跟踪位置。如果教程只会让你感到困惑,那么请求另一个教程可能不会有帮助。 – 2013-03-20 14:18:39