施力无效后,受影响的身体已经静止了一段时间
ApplyForce ineffective after affected body has been still for a while
我是第一次使用Box2D。我已经构建了一个简单的测试应用程序,它包括一个代表地面的静态物体和一个小的动态盒子,它落在地面上。然后我决定用力进行实验,分配一个键来引起一个向上的力施加在盒子上。它能像预期的那样工作,但前提是我要确保在盒子完全静止之前触发力。这种行为是意料之中的吗?
顺带一讲,动态箱体的主体、形状和夹具是这样定义的:
b2BodyDef body_def;
body_def.type = b2_dynamicBody;
body_def.position.Set(position.x, position.y);
body = world.CreateBody(&body_def);
b2PolygonShape shape;
shape.SetAsBox(size.width / 2.0f, size.height / 2.0f);
b2FixtureDef fixture_def;
fixture_def.shape = &shape;
fixture_def.density = 1.0f;
fixture_def.friction = 0.3f;
这是施加向上力的代码:
b2Body* body = box.b2_body();
body->ApplyForce(b2Vec2(0.0f, 15.0f), body->GetPosition(), false);
这是模拟步骤调用:
world.Step(time_step, velocity_iterations, position_iterations);
地点:
-
time_step
为1/60 -
velocity_iterations
= 6;和 -
position_iterations
为2.
如果需要进一步的信息,请告诉我。
谢谢。
Box2D,像大多数物理引擎一样,如果对象有一段时间没有移动,它会"让对象进入睡眠状态"。这节省了计算。如果你想让这个物体继续移动,你需要唤醒它。
body->ApplyForce(b2Vec2(0.0f, 15.0f), body->GetPosition(), false);
ApplyForce
的第三个参数告诉Box2D是否应该允许唤醒对象。您已经告诉Box2D不要唤醒对象。
相关文章:
- 在做一段时间内检查字符的无限循环
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- ::grpc::ServerReaderWriter 对象在另一个线程中一段时间后无法调用
- 一段时间后 CPU 使用率高
- 有没有办法在一段时间后将流程从流出中分离出来
- 在一段时间内更改标签文本
- 布尔函数在一段时间内不起作用
- 解决PNP在一段时间后返回坏的rvec和tvec
- 相机的旋转方向在一段时间后反转
- boost::asio::d eadline_timer 1ms 滞后一段时间
- SDL_Mixer再次播放时,从随机位置开始一段时间,然后从头开始
- 您可以在一段时间内迭代向量
- 列表STL的时间复杂性在一段时间内进行排序
- 我的开关菜单在一段时间循环中出现问题
- 如何在一段时间内更新 QLabel?
- 我可以在开关(消息)语句的同时运行一段时间吗?(C )
- 如何从一段时间返回继续
- 执行/在循环中停留一段时间,例如 1 分钟
- 施力无效后,受影响的身体已经静止了一段时间