我已经开发了一段时间的游戏,并逐渐意识到我的应用程序很快就会耗尽设备电池。我通过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的能源使用水平。

我可以添加200,000个节点(只需更改NumberOfSprites变量),能量影响增加到18/20。这对我来说当然是有意义的,尽管我发现有趣的是,我的应用程序在给定的时间可能有120个节点,只有充满动作的句柄,产生几乎同样多的能量消耗。
我的问题是:如果一个简单的动作造成了如此大的能量影响,开发人员在他们的游戏中是如何处理的?应用商店中有许多复杂的游戏,它们的电池消耗速度似乎不会这么快。我是不是遗漏了什么?
提前感谢您的帮助。
发布于 2019-01-29 02:58:55
高CPU消耗通常是抽签计数问题。您可以通过利用sprite地图集来减少您的绘图数量,尽管这些地图集有大小限制和其他值得在Swift文档中查看的怪癖。特别值得注意的是,当您将许多精灵加载到一个atlas中时,当该atlas被访问时,它会将所有这些对象放入内存中,因此当您试图减少CPU负载时,应注意此处的内存使用情况。我还想补充说,大多数具有大量动画的游戏都有非常高的能源使用率,所以“你能做的事情”是有限的。
https://stackoverflow.com/questions/47103149
复制相似问题