c++ - Box2d反重力问题

标签 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 左右。

你觉得这对吗?有什么改进这个系统的建议吗?
谢谢

最佳答案

你可以直接修改 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/

相关文章:

objective-c - -1 < 4 返回 NO?太奇怪了

ios - 在 cocos2d 中使用参数初始化场景

c++ - 是否需要创建OpenGL情侣程序?

iphone - 如何为每周一和周五等特定日期设置 UINotification?

c++ - 如何在 C++11 中初始化未在其构造函数中初始化其所有成员的类

ios - 警告-[UIApplication delegate] 只能在主线程中使用

objective-c - cocos2D&lt;不起作用

iOS Cocos2D优化

c++ - 将 FFT 转换为频谱图

c++ - 如何在此程序中输入 EOF 字符?