我正在使用 cocos2d 和 box2d。
目前我正在尝试优化我安装的系统,使某些物体的重力为 0。
在我的 tick 方法中,如果对象属性 object.isGravitated = NO,将调用反重力方法来使用 object.body->applyForce(b2Vec2(0,10));来抵消向下的力量。但这在 fps 方面似乎是昂贵的。
有多个 (5 - 10) isGravitated = NO 对象会导致 fps 下降大约 10fps 左右。
你觉得这对吗?有什么改进这个系统的建议吗?
谢谢
最佳答案
你可以直接修改 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++ 对象。
关于c++ - Box2d反重力问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6288750/