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