我现在已经开发了一段时间的游戏,并且已经意识到我的应用程序会迅速耗尽设备电池。我通过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个节点,只有一个句柄充满动作,几乎产生了能量消耗。
我的问题是:如果一个简单的动作导致这种能量影响,开发人员如何在他们的游戏中处理这个问题?应用程序商店中有许多复杂的游戏,似乎不会快速耗尽电池电量。我错过了什么吗?
提前感谢您的帮助。
答案 0 :(得分:1)
高CPU消耗通常是平局计数问题。您可以通过使用子画面地图集来减少绘制次数,尽管这些地图集具有大小限制和其他值得在Swift文档中进行回顾的怪癖。尤其值得注意的是,当您将许多精灵加载到地图集中时,访问该地图集会将所有这些对象放入内存中,因此在设法减少CPU负载时,请注意此处的内存使用情况。我还要补充一点,大多数具有动画效果的游戏具有很高的能耗,因此“您可以做什么”是有限制的。