Ios SpriteKit中的CPU使用率非常高

Ios SpriteKit中的CPU使用率非常高,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在用SpriteKit制作一个简单的基于瓷砖的游戏,我在游戏中的CPU使用率很高,这让我有些困难。我有一个由60个图块组成的地图,每个图块都是SKSpriteNode的一个子类。仅在场景中显示这60个精灵就占用了iPhone 6s模拟器80%的CPU。没有运动、用户交互或物理现象。当我用UIKit而不是SpriteKit制作同一个游戏时,我的CPU使用率为0。什么会占用这么多CPU 我的瓷砖类: import SpriteKit import UIKit class Tile: SKSpri

我正在用SpriteKit制作一个简单的基于瓷砖的游戏,我在游戏中的CPU使用率很高,这让我有些困难。我有一个由60个图块组成的地图,每个图块都是SKSpriteNode的一个子类。仅在场景中显示这60个精灵就占用了iPhone 6s模拟器80%的CPU。没有运动、用户交互或物理现象。当我用UIKit而不是SpriteKit制作同一个游戏时,我的CPU使用率为0。什么会占用这么多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 */
    }
}

Xcode上的Iphone模拟器比实际设备的CPU使用率要高很多


在真实设备中进行测试,以获得有关CPU使用率的真实指标。

Tyshka,您需要重用资源。您的代码为完全相同的输入图像数据创建新的SKTexture。只需创建一个SKTexture,然后将其设置为新节点的纹理。在代码中添加贴图,以便在给定纹理字符串名称的情况下可以检查和重用SKTexture。

谢谢!在真实手机上降到10%。@ATyshka如果这个答案解决了您的问题,您应该将其标记为。对不起!我是新来的是的我意识到了。会修好的!