ios - SKLightNode 性能问题

标签 ios swift ios8 sprite-kit sklightnode

我一直在 SpriteKit(iOS8 中的新功能)中试验 SKLightNode,即使在一个非常简单的测试用例中,我的性能也很糟糕。例如,在纯色 SKSpriteNode 上使用单一光源,我在 上得到 13.2 FPS第三代 iPad。如果我添加一个第二个光源,它会下降到糟糕的7.7 FPS

WWDC session 视频 SpriteKit 的新功能 提到,如果同一个 Sprite 上有不止一盏灯,你可能会得到不到 60 FPS,但我什至不能用一个 60 FPS . Here's the relevant section.

这是我在 swift 中的测试场景(它从一个光源开始,可以通过点击添加更多光源):

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 上运行的一些屏幕截图:

1 light source 2 light sources

这是在使用单个光源运行时单击“分析”按钮后性能选项卡的样子:

performance analysis

这显然受 GPU 限制,但我想弄清楚的是我是否只是做了一些可怕的错误,或者这是否只是 Beta 版的一个问题(希望)在发布时得到解决。我目前正在使用 Xcode6-Beta5。


更新

我将我的 iPhone 5S 升级到 iOS8 并在那里尝试了同样的事情,它在 60FPS 和 8 个光源下运行得非常好。所以,我想这只是第 3 代 iPad 的 GPU 无法胜任这项任务的问题。我会在下一个测试版发布后重试,看看是否有任何变化,以防万一。

最佳答案

这最终只是第 3 代 iPad 上的 GPU 无法完成使用 SKLightNode 的任务的问题。我现在已经使用当时最新版本的 Xcode(适用于 iOS 8.1 的版本 6.1 (6A1052d))在 iOS 8 和 iOS 8.1 上进行了测试,结果相同。我的测试代码在具有 8 个光源的 iPhone 5s 上以 60FPS 的速度运行,因此代码本身似乎不是问题所在。

关于ios - SKLightNode 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320450/

相关文章:

ios - iOS 8 扩展的 AFNetworking 后台 session 配置

ios - 设计好项目后如何将你的ios项目分解成你需要的类和对象?

ios - 我们可以在 IOS 模拟器 : 中测试 SIRIKit 扩展吗

swift - 如何获取自定义形状的 .onHover(...) 事件

ios - 为什么iOS 10 Calendar.current.timeZone不返回我的本地时区?

swift - 不同 Controller 的页面控制或 ScrollView

android - 我在 flutter 中实现以下设计时遇到问题

android - 将项目移植到另一个平台的方法

iphone - 如何获得 UIView 的正确大小?

ios - 如何使用 CloudKit 查询条件化 Segue?