SpriteKit 电池/能量消耗

3

我一直在开发一个游戏,但发现我的应用程序会迅速耗尽设备电池。我通过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轴和y轴坐标分别加50和减50,然后重复此过程。下面是这样做的能量影响。我测量了设备的能源使用水平,平均约为7-8/20。

enter image description here

我能够添加多达200,000个节点(只需更改NumberOfSprites变量),能量影响将增加到18/20。当然,对我来说这是有道理的,但我觉得有趣的是,我的应用程序在给定时间屏幕上可能有120个节点,只有一把手的操作,却产生了几乎与此相同的能量消耗。

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

提前感谢任何帮助。


你是否了解 draws count 是什么意思: view.showsDrawsCount = true?你是否使用图集? - Whirlwind
感谢您的回复。我的游戏绘制次数大约在30-40次左右。我尝试使用图集来减少绘制次数,虽然有所改善,但对能量消耗并没有太大帮助。对于我在这里发布的示例,其中能量使用被认为是“非常高”,并没有使用任何纹理,因此我想知道是否还有其他我忽略的问题。 - MikeL
根据文档,绘制次数会影响电池消耗。这就是为什么我问的原因。对于120个节点,30-40次绘制在我看来有点高,但我们先不管它...你有没有实际尝试过查看你的游戏会多快地耗尽电池?(然后可能将结果与其他游戏进行比较)。无论如何,在屏幕上有100多个节点同时移动、旋转和缩放,总是对电池有显着影响。至少这是每次Xcode都显示的情况。 - Whirlwind
1个回答

1
高 CPU 消耗通常是绘制计数问题。您可以通过使用精灵图集来减少绘制计数,但这些具有大小限制和其他怪癖值得在 Swift 文档中查看。特别值得注意的是,当您将许多精灵加载到图集中时,当访问该图集时,它会将所有这些对象放入内存中,因此您应该在寻求减少 CPU 负载时注意内存使用情况。我还要补充的是,大多数具有实质动画的游戏都具有非常高的能源使用率,因此有一个“你能做什么”的限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接