SpriteKit电池/能量耗尽

时间:2017-11-03 19:25:29

标签: ios xcode sprite-kit

我现在已经开发了一段时间的游戏,并且已经意识到我的应用程序会迅速耗尽设备电池。我通过XCode仪器测量了能量消耗,通常在17/20范围内。我有一些背景动画和禁用那些似乎有帮助。出于好奇,我用一个简单的代码开始了一个项目:

import SpriteKit
import GameplayKit

class GameScene: SKScene {

let NumberOfSprites = 1


override  func didMove(to view: SKView)
{
    view.showsDrawCount = true
    view.showsFPS = true
    view.showsNodeCount = true

    // Set scene to 414x736 with anchorPoint in the bottom left corner
    self.anchorPoint = CGPoint(x: 0, y: 0)
    self.size = CGSize(width: 414, height: 736)

    var spriteArray = [SKSpriteNode]()

    for _ in 0..<NumberOfSprites
    {
        let sprite = SKSpriteNode(color: .black, size: CGSize(width: 50, height: 50))
        sprite.position = CGPoint(x: Int(arc4random_uniform(UInt32(414))), y: Int(arc4random_uniform(UInt32(736))))
        self.addChild(sprite)
        spriteArray.append(sprite)
    }


    let moveAction = SKAction.move(by: CGVector(dx: 50, dy: 50), duration: 1.0)
    let moveAction2 = SKAction.move(by: CGVector(dx: -50, dy: -50), duration: 1.0)

    let repeatAction = SKAction.repeatForever(SKAction.sequence([moveAction, moveAction2]))

    for sprite in spriteArray
    {
        sprite.run(repeatAction)
    }

}


}

此代码将在屏幕上放置一个黑框,并将其移动x + 50,y + 50,然后无限期地移动x-50,y-50。以下是这样做对能源的影响。我在设备上平均测量了能量使用水平7-8 / 20.

enter image description here

我能够添加多达200,000个节点(只需更改NumberOfSprites变量),并且能量影响增加到18/20。这当然对我有意义,虽然我觉得有趣的是我的应用程序在给定时间在屏幕上可能有120个节点,只有一个句柄充满动作,几乎产生了能量消耗。

我的问题是:如果一个简单的动作导致这种能量影响,开发人员如何在他们的游戏中处理这个问题?应用程序商店中有许多复杂的游戏,似乎不会快速耗尽电池电量。我错过了什么吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

高CPU消耗通常是平局计数问题。您可以通过使用子画面地图集来减少绘制次数,尽管这些地图集具有大小限制和其他值得在Swift文档中进行回顾的怪癖。尤其值得注意的是,当您将许多精灵加载到地图集中时,访问该地图集会将所有这些对象放入内存中,因此在设法减少CPU负载时,请注意此处的内存使用情况。我还要补充一点,大多数具有动画效果的游戏具有很高的能耗,因此“您可以做什么”是有限制的。

相关问题