Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Box2D重力对特定物体的影响?_Ios_Box2d_Gravity_Physics Engine - Fatal编程技术网

Ios Box2D重力对特定物体的影响?

Ios Box2D重力对特定物体的影响?,ios,box2d,gravity,physics-engine,Ios,Box2d,Gravity,Physics Engine,我看到每个人都说你在Box2D世界中添加了重力: b2Vec2 gravity = b2Vec2(0.0f, -10.0f); bool doSleep = false; world = new b2World(gravity, doSleep); 问题是,如果我只想让重力作用在一个特定的b2Body上,它包含来自CCSprite的用户数据,该怎么办?好吧,这会对世界上我不想要的任何东西施加重力,那么有人能解释一下,我怎么能只对一个特定的物体施加重力 谢谢 Edit1: 我能做这行吗 _bot

我看到每个人都说你在Box2D世界中添加了重力:

b2Vec2 gravity = b2Vec2(0.0f, -10.0f);
bool doSleep = false;
world = new b2World(gravity, doSleep);
问题是,如果我只想让重力作用在一个特定的b2Body上,它包含来自CCSprite的用户数据,该怎么办?好吧,这会对世界上我不想要的任何东西施加重力,那么有人能解释一下,我怎么能只对一个特定的物体施加重力

谢谢

Edit1: 我能做这行吗

_bottomBody->ApplyForce(gravity, _bottomBody->GetPosition());

而不是世界=新世界。。。等如果重力只作用在物体上,那不是很有效吗?

只要在每一帧对特定的物体施加一个力/脉冲。它将模拟重力

// a procedure called every frame
void Application::on_update_world(double t)
{
  m_body_with_custom_gravity->applyForce(CUSTOM_GRAVITY * m_body_with_custom_gravity->getMass());

  m_phys_world->Step(t, VEL_ITERATIONS, POS_ITERATIONS);
}
一条与您的问题密切相关的线索:

怎么会这样?我更愿意使用上面的方法,是否有任何方法可以修改上面的代码以应用于一个对象?毫无疑问,您的应用程序有一个帧循环,即调用b2World::step()的过程/方法。在此过程中,需要为指定的主体调用applyForce方法。请参阅此答案中的代码示例。我的应用程序没有帧循环。我的应用程序是Box2d混合Cocos2d混合Obj C。我只是使用一个Cocos2d游戏循环,每一秒都会被调用,这意味着当视图更新时。如果我的原始帖子中的编辑1代码适用于我,请选中编辑1。您的引擎在哪里调用b2World::Step()?这是对你的身体施加压力的唯一正确的地方。我提醒您,为了进行正确的模拟,必须在每次调用b2World::Step()方法之前将自定义重力应用于身体。box2d引擎将在b2World::Step()结束时重置所有应用于身体的力,因此必须在每次调用b2World::Step()方法之前将自定义重力重新应用于身体。