【发布时间】:2013-03-09 16:05:31
【问题描述】:
我正在尝试使用图形包构建的两个矩形来实现 2D 碰撞检测。 不幸的是,我开始认为我不理解编写处理此问题的函数所需的逻辑。
下面是我绘制一个小精灵和几个其他矩形的代码。我的精灵随着键盘输入移动。
我用过几本书,也尝试过 Nehe 等网站,虽然它们是非常好的教程,但它们似乎只直接处理 3D 碰撞。
有人可以向我展示一种使用上面的矩形实现碰撞检测的有效方法吗?我知道您需要比较每个对象的坐标。我只是不确定如何跟踪对象的位置,检查碰撞并在碰撞时停止移动。
我正在自学,现在似乎已经停止了好几天。我完全没有想法,搜索的谷歌页面比我想记住的要多。对不起我的天真。
如果有任何建设性的 cmets 和示例代码,我将不胜感激。谢谢。
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 碰撞检测”会找到很多教程。你能描述一下为什么这些对你不起作用吗?
-
我猜是因为我不懂他们。可能是我读的太多,让自己感到困惑。我认为我哪里出错了,我不是 100% 确定如何跟踪精灵的当前位置,因此我认为我总是在比较精灵原点 x/y,当然,它总是会返回为 false碰撞...
-
您可能希望将您的问题细化为您正在尝试的特定“第一步”。跟踪位置,也许。如果教程只是让您感到困惑,那么要求另一个教程可能无济于事。
-
感谢您的耐心等待。那是个很好的观点。我现在已经编写了一个根据下面的评论测试碰撞的函数,但是当我的精灵与另一个矩形碰撞时,它会在原始 x/y 坐标处重绘我的精灵。因此回到“跟踪”困境。