我的项目在iPhone 6上以55-60FPS运行,但任何旧设备都无法运行,因为某些东西正在消耗CPU。
我认为问题与地图上的瓦片和层数有关(64x256,4层),Instruments显示"SKCRenderer:preprocessSpriteImp(..."占用了5198毫秒(23.2%)的运行时间。
JSTileMap是否会一次性加载每个瓦片的图像(可见或不可见)? RW的这篇文章表明情况确实如此,并且可以通过解决这个问题来大大提高性能: http://www.raywenderlich.com/forums/viewtopic.php?f=29&t=9479 在另一个性能注意事项中 - Sprite Kit会检查所有节点并决定每帧需要显示哪些节点。如果您有一个大的瓷砖地图,这可能会对性能造成很大影响。 JSTileMap在加载地图时会加载所有节点(每个瓷砖的SKSpriteNode)。因此,我在使用我的地图(500 x 40个瓷砖)的Sprite Kit版本中也遇到了性能问题。我在包含在该工具包中的JSTileMap版本中添加了一个检查,标记了每个瓷砖的隐藏属性,然后智能地显示和隐藏只进入/退出屏幕空间的瓷砖。这显著提高了这些更大地图的性能。
不幸的是,该文章没有详细介绍解决此问题所采取的步骤。
我的第一个想法是(我是初学者,请温柔点)通过循环遍历每个点并检查特定层上是否有瓷砖来创建一个节点数组。从那里开始,我将根据与玩家的距离添加/删除它们。
但这并没有起作用,因为将节点添加到数组的过程仅会导致应用程序在更大的地图上永远挂起。
我认为问题与地图上的瓦片和层数有关(64x256,4层),Instruments显示"SKCRenderer:preprocessSpriteImp(..."占用了5198毫秒(23.2%)的运行时间。
JSTileMap是否会一次性加载每个瓦片的图像(可见或不可见)? RW的这篇文章表明情况确实如此,并且可以通过解决这个问题来大大提高性能: http://www.raywenderlich.com/forums/viewtopic.php?f=29&t=9479 在另一个性能注意事项中 - Sprite Kit会检查所有节点并决定每帧需要显示哪些节点。如果您有一个大的瓷砖地图,这可能会对性能造成很大影响。 JSTileMap在加载地图时会加载所有节点(每个瓷砖的SKSpriteNode)。因此,我在使用我的地图(500 x 40个瓷砖)的Sprite Kit版本中也遇到了性能问题。我在包含在该工具包中的JSTileMap版本中添加了一个检查,标记了每个瓷砖的隐藏属性,然后智能地显示和隐藏只进入/退出屏幕空间的瓷砖。这显著提高了这些更大地图的性能。
不幸的是,该文章没有详细介绍解决此问题所采取的步骤。
我的第一个想法是(我是初学者,请温柔点)通过循环遍历每个点并检查特定层上是否有瓷砖来创建一个节点数组。从那里开始,我将根据与玩家的距离添加/删除它们。
但这并没有起作用,因为将节点添加到数组的过程仅会导致应用程序在更大的地图上永远挂起。
有人能帮忙吗?我想处理更大/更复杂的瓦片地图,但性能问题让我很头疼。
谢谢阅读!
更新:感谢SKAToolKit:https://github.com/SpriteKitAlliance/SKAToolKit
他们的裁剪功能解决了我的问题,现在我可以运行更大的地图,并且CPU使用率不到35%。