gpt4 book ai didi

C++ 二维多边形碰撞检测

转载 作者:行者123 更新时间:2023-11-30 04:19:54 24 4
gpt4 key购买 nike

我正在尝试使用图形包构建的两个矩形实现 2D 碰撞检测。不幸的是,我开始认为我不理解编写处理此问题的函数所需的逻辑。

下面是我绘制一个小 Sprite 和其他几个矩形的代码。我的 Sprite 随着键盘输入而移动。

我已经使用了几本书,也尝试过像 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();
}

最佳答案

您可以在绘制之前将此碰撞函数与 AABB 结构(AABB 代表 Aligned Axis Bounding Box)结合使用。

AABB.c

AABB* box_new(float x, float y, float w, float h, int solid)
{
AABB* box = 0;
box = (AABB*)malloc(sizeof(AABB*));

box->x = (x) ? x : 0.0f;
box->y = (y) ? y : 0.0f;
box->width = (w) ? w : 1.0f;
box->height = (h) ? h : 1.0f;

return(box);
}

void box_free(AABB *box)
{
if(box) { free(box); }
}

int collide(AABB *box, AABB *target)
{
if
(
box->x > target->x + target->width &&
box->x + box->width < target->x &&
box->y > target->y + target->height &&
box->y + box->height < target->y
)
{
return(0);
}
return(1);
}

AABB.h

#include <stdio.h>
#include <stdlib.h>

typedef struct AABB AABB;
struct AABB
{
float x;
float y;
float width;
float height;
int solid;
};

AABB* box_new(float x, float y, float w, float h, int solid);
void box_free(AABB *box);
int collide(AABB *box, AABB *target);

希望对你有所帮助! :)

关于C++ 二维多边形碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15525632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com