【问题标题】:Endless runner game level generation on the fly in Sprite Kit在 Sprite Kit 中动态生成无尽的跑步者游戏关卡
【发布时间】:2014-06-25 20:49:33
【问题描述】:

我有一个 Endless Runner 游戏,我使用两个适度(大约 1500 像素)节点进行滚动。

他们互相关注,就像这样|firstNode||secondNode|
他们每个人身上都有许多物体,树木,各种带有物理实体的物体。 当其中一个离开屏幕时,我从中删除所有对象,将其重新附加到实际在屏幕上的节点的末尾,然后再次重新创建所有对象 - 在随机预设之一中。

但是有一个问题,当我为节点重新创建对象时,我会遇到小延迟,大约 0.1 秒,这使我的物理关闭并且玩家经常死亡。

如何使游戏在对象的再生过程中不滞后?

我尝试使用 GCD 在另一个线程中重新创建该东西,但由于我使用关节和引脚连接而失败,并且它需要在主线程中执行此操作。

我也考虑过在某处预先缓存那些预设部分,但由于我将关节连接到实际的物理世界,这似乎是不可能的。我还需要重新创建玩家可能捡到的硬币。

我该怎么做?实时重建大量对象时如何消除延迟?

【问题讨论】:

  • 你不应该为你的新节点创建所有的对象,而应该只创建那些即将进入视图的对象。这将提高您的 FPS,节省您的内存和延迟时间。
  • @sangony 我创建了可以看到的对象,它们会在几秒钟内出现。
  • 你在真机上测试过吗?模拟器往往滞后更多。

标签: ios7 sprite-kit


【解决方案1】:

您应该实现对象池化。

预先创建所有对象,然后根据需要管理重用它们。当您需要一个对象时,从池中获取它。完成后,将其放回池中

冲洗,重复。

就池大小而言,这取决于一次需要多少给定对象。

【讨论】:

  • 这很有帮助,我制作了一些我在启动时创建的对象数组,并将它们定位在新事物上。我仍然需要创建物理实体,但延迟已经消失。
  • 很高兴听到。是的,如果你不断地创建和杀死对象,对象创建可能会导致延迟。此外,您减少了垃圾收集的需要。虚拟垃圾填埋场也没有被枯树填满。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多