【发布时间】:2017-11-03 19:25:28
【问题描述】:
我已经开发了一段时间的游戏,并且已经意识到我的应用程序会很快耗尽设备电池。我通过 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 个节点,只有一个充满动作的句柄,它产生的能量消耗几乎一样多。
我的问题是:如果一个简单的动作会造成如此大的能量影响,那么开发者如何在他们的游戏中处理这个问题?应用商店中有许多复杂的游戏似乎不会很快耗尽电池电量。我错过了什么吗?
提前感谢您的帮助。
【问题讨论】:
-
你是什么draws count:
view.showsDrawsCount = true?你用地图集吗? -
感谢您的回复。我的游戏的平局数约为 30-40。我尝试过使用地图集,它使我的绘制计数减少了一点,但似乎对能量消耗没有多大帮助。对于我在此处发布的示例,能量使用被认为是“非常高”,没有任何纹理,所以我想知道是否还有其他我遗漏的东西。
-
根据文档,绘制次数会影响电池消耗。这就是我问的原因。对于 120 个节点,30-40 次抽签在 IMO 中有点高,但让我们把它放在一边……你真的试过看看你的游戏消耗电池的速度有多快吗? (也许然后将结果与其他游戏进行比较)。无论如何,屏幕上有 100 多个节点,同时移动、旋转和缩放,总是对电池产生重大影响。至少 Xcode 每次都是这样。
标签: ios xcode sprite-kit