Box2d反重力问题

时间:2011-06-09 06:12:00

标签: c++ objective-c cocos2d-iphone box2d objective-c++

我正在使用cocos2d和box2d 目前我正在尝试优化我已安装的系统,以使某些物体具有0重力 在我的tick方法中,如果对象属性object.isGravitated = NO,则将调用反重力方法以使用object.body-> applyForce(b2Vec2(0,10));抵消向下的力量。但就fps而言,这似乎代价高昂 有多个(5-10)isGravitated = NO对象导致fps下降大约10fps左右。

这对您和您改进此系统的建议是否正确? 感谢

1 个答案:

答案 0 :(得分:1)

你可以直接修改b2body,因为它包含一个重力因子。默认情况下,将其设置为1.0f,这意味着正常的重力。将其设置为0.0f,无重力。

使用b2Island计算重力,所以在b2Island.cpp中查找该行(它在Solve方法中):

b->m_linearVelocity += step.dt * (gravity + b->m_invMass * b->m_force);

修改它以将重力乘以重力因子。

这应该是快速,有效的,而不是很多工作。

你必须用C或C ++,而不是Objective-C,因为它是一个C ++对象。