Cocos2d iPhone Chipmunk 同步问题
在我的 cocos2d-iphone 项目中,我使用 Chipmunk 来提供物理模型。此外,我正在为 Chipmunk 使用 SpaceManager obj-c 包装器。
我给了花栗鼠一个constantDt时间步长。
现在,我遇到的问题是物理模拟与游戏循环不同步。这意味着游戏的时间根据 FPS 的不同而有所不同(更具体地说,它们的不同取决于我是在模拟器、设备还是较新的设备中运行它)。
这会对游戏玩法产生灾难性的影响。例如,如果 FPS 由于某种原因变慢,物理模拟会爬行并且对象移动会更慢。这使得关卡设计几乎不可能!
请帮忙!
In my cocos2d-iphone project, I am using Chipmunk to provide a physics model. Additionally, I am using the SpaceManager obj-c wrapper for Chipmunk.
I am giving Chipmunk a constantDt timestep.
Now, the problem I am having is that the physics simulation is out-of-sync with the game loop. This means that the timings of the gameplay differ depending on the FPS (more specifically, they differ depending on whether I am running it in the simulator, a device, or a newer device).
This has disastrous effects on gameplay. For example, if the FPS slows for some reason, the physics simulation crawls and object move much more slowly. This makes level design near impossible!
Please help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以尝试在游戏中使用两个循环。使用NSTimer来刺激Chimpmunk,CADisplayLink仅用于绘图。在每次重绘时,询问物理模型中对象的当前位置。
You could try using two loops in your game. Use NSTimer to stimulate Chipmunk and CADisplayLink only for drawing. On every redraw ask your physics model for current position of objects.
因此,我通过使用 Spacemanager 的前沿版本(来自源代码)解决了这个问题。它有一个改进的阶跃函数(只要您使用constantDt),可以“累加”自上次重新计算以来可能累积的任何额外时间,并将其考虑在内。
感谢移动兄弟!
So, I fixed this by using the bleeding edge version of Spacemanager (from source). It has an improved step function (as long as you use a constantDt) that "adds up" any extra time that may have accumulated since the last recalc, and accounts for it.
Thanks MobileBros!