我一直在尝试使用SKLightNode
SpriteKit(iOS8 中的新功能),即使在一个非常简单的测试用例中,我的性能也很糟糕。例如,使用纯色上的单个光源,我在第三代 iPad上获得13.2 FPS。如果我添加第二个光源,它会下降到糟糕的7.7 FPS。SKSpriteNode
WWDC 会议视频What's New in SpriteKit提到,如果您在同一个精灵上拥有多个灯,您可能会获得不到 60 FPS,但我什至无法获得 60 FPS。这是相关部分。
这是我的快速测试场景(它从一个光源开始,可以通过点击添加更多):
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let center = CGPointMake(size.width / 2.0, size.height / 2.0)
let background = SKSpriteNode(color: SKColor.lightGrayColor(), size: size)
background.position = center
background.lightingBitMask = 1
addChild(background)
let light = SKLightNode()
light.position = center
light.falloff = 1.0
light.lightColor = SKColor(hue: 0.62 , saturation: 0.89, brightness: 1.0, alpha: 0.4)
light.shadowColor = SKColor.blackColor().colorWithAlphaComponent(0.4)
addChild(light)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
let light = SKLightNode()
light.position = location
light.falloff = 1.0
light.lightColor = SKColor(hue: 0.62 , saturation: 0.89, brightness: 1.0, alpha: 0.4)
light.shadowColor = SKColor.blackColor().colorWithAlphaComponent(0.4)
addChild(light)
}
}
}
以下是它在我的第三代 iPad 上运行的一些屏幕截图:
这是使用单个光源运行时单击“分析”按钮后性能选项卡的外观:
这显然是受 GPU 限制的,但我想弄清楚的是我是否只是在做一些可怕的错误,或者这只是测试版的一个问题,(希望)会在发布时间之前得到解决。我目前正在使用 Xcode6-Beta5。
更新
我将我的 iPhone 5S 升级到 iOS8 并在那里尝试了同样的事情,它在 60FPS 和 8 个光源下运行得非常好。所以,我想这只是第三代 iPad 的 GPU 无法胜任任务的问题。我会在下一个测试版发布后重试,看看是否有任何变化,以防万一。