SpriteKit中的CPU使用率非常高
问题描述:
我在SpriteKit中制作了一个简单的基于磁贴的游戏,并且在我的游戏中CPU使用率很高。我有一张由60个贴图组成的地图,每个贴图都是SKSpriteNode的子类。只是在场景中显示这60个精灵在iPhone 6s模拟器中使用多达80%的CPU。没有运动,用户交互或物理进行。当我在UIKit中制作相同的游戏而不是SpriteKit时,我的CPU使用率为0.什么可以使用这么多的CPU?SpriteKit中的CPU使用率非常高
我的瓷砖类:
import SpriteKit
import UIKit
class Tile: SKSpriteNode {
var tileType = "grass", tileX = 0, tileY = 0
init (tileType: String, tileX: Int, tileY: Int) {
self.tileType = tileType
self.tileX = tileX
self.tileY = tileY
let texture = SKTexture(imageNamed: tileType)
super.init(texture: texture, color: UIColor(), size: texture.size())
self.userInteractionEnabled = true
self.position = CGPoint(x: CGFloat(45+64*(tileX-1)), y: CGFloat(47+56*(tileY-1)))
self.zPosition = -1
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
和我的雪碧套件现场代码:
import SpriteKit
var map: [[String]] = [["grass","water","grass","rocky","rocky","grass","grass","grass","grass","water"],["grass","water","grass","grass","rocky","rocky","grass","grass","water","water"],["grass","water","water","grass","rocky","grass","grass","water","water","water"],["grass","grass","water","rocky","rocky","grass","grass","water","water","water"],["grass","grass","water","rocky","rocky","grass","water","water","water","water"],["grass","grass","water","rocky","rocky","grass","water","water","water","water"] ]
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Setup your scene here */
for (rowNumber, row) in map.enumerate() {
for (columnNumber, type) in row.enumerate() {
let theTile = Tile(tileType: type, tileX: columnNumber+1, tileY: rowNumber+1)
self.addChild(theTile)
}
}
self.backgroundColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0)
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
答
iPhone模拟器上的Xcode比在真实设备更大的CPU使用率。
在真实设备中测试以获得有关CPU使用情况的真实指标。
答
Tyshka,你需要重用资源。您的代码为完全相同的输入图像数据创建一个新的SKTexture。只需创建一个SKTexture,然后将其设置为新节点的纹理。给你的代码添加一个映射,以便SKTexture可以在给定纹理字符串名称的情况下进行检查和重用。
+0
是的,我意识到这一点。将解决! –
谢谢!在真正的手机上降至10%。 –
@ATyshka如果这个答案解决了你的问题,你应该将它标记为[accepted](http://stackoverflow.com/help/accepted-answer)。 – Whirlwind
对不起!我是这个网站的新手 –