C++ Box2D碰撞问题

C++ Box2D碰撞问题,c++,box2d,C++,Box2d,Box2D非常新,希望您能提供帮助 我有一个简单的函数,它接受一个b2World和b2Body*,其中body应该下落,直到它与一个接地盒(已经在main()中创建)碰撞为止 该守则基本上如下: void snake::update(b2World world, b2Body* snake) { bool running = true; Clock deltaClock; Time deltaTime; while (running) {

Box2D非常新,希望您能提供帮助

我有一个简单的函数,它接受一个b2World和b2Body*,其中body应该下落,直到它与一个接地盒(已经在main()中创建)碰撞为止

该守则基本上如下:

void snake::update(b2World world, b2Body* snake)
{
    bool running = true;
    Clock deltaClock;
    Time deltaTime;

    while (running)
    {
        deltaTime = deltaClock.getElapsedTime();
        deltaClock.restart();
        world.Step(deltaTime.asSeconds(), 6, 2);

        position = snake->GetPosition();

        char ch;
        if (_kbhit())
        {
            ch = _getch();
            if (ch == 'x')
            {
                running = false;
            }
        }
    }
}
这段代码最初是在main()中实现的,并且运行良好。然而,当我试图将它移动到一个单独的类中它自己的函数时,冲突不再起作用。。。我不知道为什么,因为它实际上是复制/粘贴的,只是改变变量名以适应参数

我不知道出了什么问题,如果您需要任何其他信息,我非常乐意提供


提前感谢。

基本上就是您在原始函数头中按值传递
b2World
对象之前设置参数的方式

void snake::update(b2World world, b2Body* snake)
这意味着您正在创建一个副本,如果正在修改该副本,则传递给函数的原始对象将保持不变。使用类型后面的
&
,您现在通过引用传递对象

void snake::update(b2World& world, b2Body* snake)
这意味着没有创建副本,而是函数与原始对象一起工作,因此,更改也会影响它

因此,当您在使用此循环之前,它可能嵌套在
main
函数或其他任何函数中,并且可以修改在该范围内声明的原始变量
world
。现在您已经将它移动到一个单独的函数,您必须告诉编译器您想要使用原始对象


阅读更多关于按值传递和按引用传递的信息,例如
world.Step
做什么?它是否修改了
world
?如果是这样的话,
world
以前是一个全局变量吗?您正在按值传递
world
,这意味着如果此函数结束(似乎不可能脱离循环),调用方将不会看到
world
中的更改。我认为我们需要大量循环中的代码,这些代码似乎没有意义或无法工作。比如
position=snake->GetPosition()在哪里定义了
位置
?它是如何使用的?然后是
(运行时){}
似乎不可能
运行时
更改为false。@DJSchaffner
world。步骤
执行碰撞检测。AFAIK它不会修改
世界
world
以前不是一个全局变量,它是在main中创建的,然后作为一个参数传递出去。@drescherjm抱歉,我在这方面显然是个新手<代码>位置
定义为类内的
b2Vec2
。至于无限循环,有外部条件结束循环,当我在
main()
中使用相同的循环时,它工作得很好。。。另外,
position=snake->GetPosition()
仅用于存储
snake
的位置并将其写入控制台。