0

我正在使用Cocos2d编写iOS游戏。屏幕上有很多球(大约7000个物体)。太多的box2d对象让我的游戏变得缓慢

当触摸屏幕时,球应该在该区域内爆炸,并且应该充满周围的球。

enter image description here

我创建了一个Box2D的对象为他们每个人,并在物理世界中添加它。

问题如下。

  1. 首先,如果没有触摸事件,屏幕由7000个球填充,如果我们开始了物理,它们是相互重叠的,而且在屏幕上方的缺口。

enter image description here

  • 当触摸屏幕,游戏运行很慢。
  • 如何让游戏顺利进行?

    +4

    7,000个球。每个球接触6个其他球。这是42,000点的联系。每个人都有自己的力量,动力等......来计算。在60FPS下运行(你应该是这样),你有16毫秒的时间来为每一帧做所有事情。随着其他东西的完成(绘图等),它给你可能4或5毫秒的物理的东西。这是每个接触点95纳秒。无论你做什么都不会发生。 – Fogmeister 2014-10-07 10:15:21

    回答

    4

    如何让游戏顺利进行?

    减少球的数量。 7000物理启用,碰撞机构是纯粹的矫枉过正。即使700是很多。

    在任何情况下,都没有快速解决这个问题。您可以尝试减少box2d世界时间步中速度迭代的位置数量,并且不要使用碰撞回调方法(不要设置碰撞委托),但这就是它。

    +0

    那么如何才能实现球流向下效应? – ttotto 2014-10-07 10:09:18

    +0

    非常宽泛的问题,但实际上它通常使用物理启用的球来实现。然而,像我的水和饲料油在哪里的游戏使用的球数量少得多,自定义渲染器可以将多个球结合起来,看起来像是更大的流体splats,甚至可能是专门为此任务而制作的定制物理。如果你已经看过PC上的技术演示,那么为了达到一半的体格帧速率,流体模拟(也是很多小球)完全在GPU(图形卡)上运行。 – LearnCocos2D 2014-10-07 10:13:46

    +0

    您可能想尝试降低速度和位置集成步骤,这是唯一可能有助于提高性能的方法。在任何情况下,避免实施碰撞回调,即使它们不运行任何代码,调用它们的开销也将在7000个球上显示出来。 – LearnCocos2D 2014-10-07 10:16:09