【问题标题】:Sprite Kit render performance using 16x16 tiles vs 32x32 tiles?Sprite Kit 使用 16x16 瓷砖与 32x32 瓷砖的渲染性能?
【发布时间】:2015-08-28 03:55:31
【问题描述】:

我制作了一个 Tiled 游戏。现在,我正在通过增加场景中的节点数量来对手机的功能进行压力测试。有基于物理的东西,人工智能运动,昼夜系统,粒子在这里和那里弹出以及在我的场景的引擎盖下发生的许多其他东西。我想知道使用 16x16 瓦片(我现在拥有的瓦片)与使用 32x32 瓦片是否存在性能差异?这些图块基本上只是添加到场景中的图像;他们没有任何物理实体或任何其他类似的东西。它们确实具有我在 Tiled 中制作地图时设置的属性,但我认为这不会对性能产生任何影响。每张地图都有几层(背景、植被、生成点、建筑物,有时还有更多)。下面是如何为 1 个这样的层渲染图块的代码 sn-p:

        if([map propertiesForGid:tileGid][@"shrub"])
        {
            SKSpriteNode *tile = [layer tileAtCoord:coord];
            tile.name = @"vegShrub";
            [self addChild:tile];
        }
        else if([map propertiesForGid:tileGid][@"tree"])
        {
            SKNode *tile = [[Breakable alloc] initWithWhole:[atlas textureNamed:@"tree"] broken:[atlas textureNamed:@"tree-stump"]];
            tile.position = [self pointForCoord:coord];
            [self addChild:tile];
            [layer removeTileAtCoord:coord];
        }

如果我在当前的 16x16 瓷砖上使用 32x32 瓷砖,我会以某种方式释放一些内存或“减轻系统负载”吗?

【问题讨论】:

  • 这可能不会有什么不同,因为您将绘制相同数量的像素(填充率)。如果您在每一帧都枚举平铺精灵并且在该渲染循环中效率低下,或者您每帧都对每个精灵做疯狂的事情,那么它可能会有所作为。

标签: ios objective-c performance sprite-kit tiled


【解决方案1】:

使用瓦片地图,每个瓦片通常由一个 SKSpriteNode 表示。因此,如果您的地图是 320 x 320 并且您使用的是 32x32 瓦片,那么您最终会得到 100 个节点。在相同的地图大小上使用 16x16 瓦片将产生 400 个节点。节点越多,负载越大。

另一方面,您应该考虑让SKAToolKit 解析您的应用程序中的瓦片地图。它是开源的、免费的,并具有大量内置功能,例如自动跟随、迷你地图等......

【讨论】:

  • 我认为你的逻辑是可靠的,我同意你的看法。关于您附加的链接……天哪!这正是我所需要的,还有更多!非常感谢。
  • @Krekin - 很高兴能提供帮助。
  • 请注意,SKATiledMap 实际上也在为每个图块创建一个SKSpriteNode,这是一种非常低效的地图渲染方式。如果您需要更好的性能(以及对 Tiled 功能的更完整支持),您应该尝试 TilemapKit - tilemapkit.com
  • @ThorbjørnLindeijer Love Tiled 并感谢您制作了如此出色的产品。我是 SKATK 的开发人员,我很想更多地谈论您喜欢/不喜欢什么,因为 SKATiledMap 可以与您的产品一起使用。您在信用部分提供的链接“TilemapKit 是沮丧的 tilemap 游戏开发人员 Steffen Itterheim(又名 LearnCocos2D,Learn Cocos2D 和 Learn SpriteBuilder 的作者)和 Marcus Lubczyk 的一个项目。”与我制作 SKA 东西的原因相同。随时给我发电子邮件讨论 SO 之外的内容。 SKATK 不仅适用于 Tiled,而且我想为 Sprite Kit 开发者制作最好的工具包。
  • @ThorbjørnLindeijer 您能否更明确地说明为什么为每个图块关联一个SKSpriteNode 效率很低?
猜你喜欢
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
相关资源
最近更新 更多