Box2D 碰撞问题
Box2D Collision Issues
刚接触 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()中实现的,运行良好。然而,当我试图将它移动到单独的 class 中它自己的函数时,碰撞不再有效......我不知道为什么,因为它确实是 copy/pasted,只是更改变量名称以适应参数...
我不知道出了什么问题,如果您需要任何其他信息,我很乐意提供。
提前致谢。
基本上是您在原始函数头中按值传递 b2World
对象之前设置参数的方式。
void snake::update(b2World world, b2Body* snake)
这意味着您正在创建一个副本,如果这个副本被修改,传递给函数的原始对象保持不变。使用类型后面的 &
,您现在通过引用传递对象。
void snake::update(b2World& world, b2Body* snake)
这意味着没有创建副本,而是函数与原始对象一起工作,因此,更改也会影响它。
所以当你使用这个循环之前它可能嵌套在你的 main
函数或其他任何东西中并且可以修改在该范围内声明的原始变量 world
。现在您已将它移动到一个单独的函数中,您必须告诉编译器您想要使用原始对象。
详细了解按值传递和按引用传递 here and here 例如
刚接触 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()中实现的,运行良好。然而,当我试图将它移动到单独的 class 中它自己的函数时,碰撞不再有效......我不知道为什么,因为它确实是 copy/pasted,只是更改变量名称以适应参数...
我不知道出了什么问题,如果您需要任何其他信息,我很乐意提供。
提前致谢。
基本上是您在原始函数头中按值传递 b2World
对象之前设置参数的方式。
void snake::update(b2World world, b2Body* snake)
这意味着您正在创建一个副本,如果这个副本被修改,传递给函数的原始对象保持不变。使用类型后面的 &
,您现在通过引用传递对象。
void snake::update(b2World& world, b2Body* snake)
这意味着没有创建副本,而是函数与原始对象一起工作,因此,更改也会影响它。
所以当你使用这个循环之前它可能嵌套在你的 main
函数或其他任何东西中并且可以修改在该范围内声明的原始变量 world
。现在您已将它移动到一个单独的函数中,您必须告诉编译器您想要使用原始对象。
详细了解按值传递和按引用传递 here and here 例如