Box2d 碰撞检测 b/w "b2body & c++ object"

Box2d Collision Detection b/w "b2body & c++ object"

本文关键字:b2body c++ object 碰撞检测 Box2d      更新时间:2023-10-16

我正在开发一款弹丸射击游戏。

游戏的基本结构是用户使用箭头键控制坦克,敌人将从屏幕右侧进入并开始向坦克走去。坦克将发射弹丸火箭,如果它击中敌人,那么如果敌人到达坦克,则用户得分超过用户损失。

坦克移动是使用一个Animated_Sprite类实现的,该类是一个OpenGL,或者更确切地说是在main函数中创建的名为"hero"的c ++对象。-敌人的移动也是使用相同的动画精灵类实现的,该类将精灵表切成不同的帧,帧在使用Update_Sprite_Animation()函数在对象运动期间发生变化。因此,"enemy"对象也是在main函数中创建的Animated_Sprite类对象。-随着坦克的移动,背景也向相反的方向移动。

-主要问题(对我来说)- 将从坦克位置发射的火箭(Box2d圆形)不是Animated_Class对象,它是这样的:

b2Body* addCircle(int x,int y,int r,bool dyn=true){...}
void drawcircle(b2Vec2 center,float r,float angle){...}
b2Body *mycircle;
float speed=6,angle=300*3.141/180;  ...

然后我将线速度应用于 box2d 的"mycircle"主体,以获得火箭(圆)的弹丸运动,如下所示:

void mouse( int button, int state,int x,int y)
{
           if(state==GLUT_DOWN)
           {
            mycircle=addCircle((hero->x)-5,(hero->y)+3,8,true);
            b2Vec2 vector = speed * b2Vec2(cos(angle), -sin(angle));
            mycircle->SetLinearVelocity(vector);
          }
}

-根据我所读到的内容,在Box2d中,通过创建另外两个对象并获取如下所示的联系人列表来检查对象之间的碰撞:

 for (b2Contact* contact = world->GetContactList(); contact; contact = contact->GetNext())
          contact->... //do something with the contact

-既然英雄和敌人不是b2body对象,而是Animated_Sprite类对象,你建议我应该怎么做?我可以对 Animated_Sprite 类对象进行类型转换以获取 b2body 对象吗?还是我必须创建一个新的 B2body 对象并为其提供英雄或敌人对象的引用?如果是,请指导我。还是我必须创建一个新的b2body对象并为其提供英雄和敌人的所有固定装置?必须有一种方法可以检测b2world之外的我们自己的类对象与b2body对象之间的碰撞,例如box2d的圆形,但我对此很陌生,我不知道该怎么做。

- 没有将英雄和敌人实现为Box2d身体的原因:因为我不知道如何在b2body对象上实现Animated_sprite类动画,而我使用box2d进行弹丸运动的原因是因为我不知道如何使用原始Opengl实现它。

我无法阅读有关碰撞的 Box2d 的整个手册,因为这会花费太多时间。

指导我并告诉我我应该怎么做,以便我可以检测到 b2body 对象与 b2world 之外的对象(即普通 c++ Opengl 对象)之间的碰撞。

[问题已解决]

为了使用 box2d

检测碰撞,我认为有必要将它们作为 box2d 主体,而不仅仅是 c++ 对象。同时制作一个 c++ 对象并将其映射到 Box2d 主体将解决这个问题,Box2d 可以使用其联系侦听器侦听冲突。我如何将我的自定义类对象制作成 b2body 对象如下 ->

我在 Animated_Sprite 类构造函数中附加了 box2d 物理主体的代码,现在每次实例化一个新的 Animated_Sprite 对象时,也会使用它创建对新物理主体的引用,因此创建Animated_Sprite类的对象基本上也是 box2d 世界的物理对象。现在我得到了我的目标。谢谢–

顺便说一句,我按照 iforce2d.net 网站上的教程来实现这一目标,他们有很好的教程。如果有人想知道我是如何做到的,请按照此链接上的教程进行操作"在BOX2D世界中绘制自己的对象并创建它们的物理实体"> iforce2d.net/b2dtut/drawing-objects