【发布时间】:2013-10-25 00:24:26
【问题描述】:
我正在创建一个带有平铺地图的 SpriteKit 游戏。每个图块都是一个 SKSprite 节点。当我有大约 800 块瓷砖时,就没有问题了。但是如果我尝试将地图的大小增加到大约 2000 个图块,我的 FPS 会从 60 变为 20。屏幕上的图块节点的数量不会改变(大约 80),只是屏幕外的节点数。关于可能导致此问题的原因或如何解决的任何想法?
【问题讨论】:
-
Kobold Kit 中的瓦片地图渲染器只绘制可见瓦片。 koboldkit.com你的地图有多大?几层?你是对每个图块做一些事情还是它们只是静态精灵?
-
图块不是动态的,但它们确实有物理实体。这是一个挖掘游戏,所以“玩家”通过重力坐在这些瓷砖的顶部,并在他四处移动时将它们从场景中移除。我想映射到大约 40 瓦宽和 200 瓦高。
-
生成 8.000 个物理物体,难怪事情变慢了。不过你不需要物理,一个简单的 CGRectIntersect 测试 + 速度积分就足够了
-
他说得对,我对物理实体的工作并不多,但是是否有可能只将物理应用到角色附近的图块上,而不是一次应用到整个地图?
-
您可以将物理实体更改为非动态(将动态设置为 false),然后打开仅我们需要的动态。这将减少运行速度较慢的 FPS。动态有助于忽略应用于“地面”平铺地图单元的模拟。你可以在屏幕外有一个假的墙精灵,当它穿过它时,动态标志会被打开。在某些游戏中,最好只在关键元素上使用物理。不是整个游戏。您仍然可以在动态关闭的情况下检测碰撞。我目前的游戏有 1200 个节点/60fps,并不是所有的元素都同时是动态的。
标签: ios sprite-kit