简体   繁体   English

SpriteKit中的CPU使用率非常高

[英]Very High CPU Usage in SpriteKit

I'm making a simple tile-based game in SpriteKit and I'm having some difficulty with high CPU usage in my game. 我在SpriteKit中制作了一个简单的基于平铺的游戏,而且我在游戏中使用高CPU时遇到了一些困难。 I have a map made of 60 tiles, and each tile is a subclass of SKSpriteNode. 我有一个由60个图块组成的地图,每个图块是SKSpriteNode的子类。 Just displaying these 60 sprites in the scene is using up to 80% of CPU in the iPhone 6s simulator. 只需在场景中显示这60个精灵就可以在iPhone 6s模拟器中使用高达80%的CPU。 There is no motion, user interaction, or physics going on. 没有动作,用户交互或物理进行。 When I made the same game in UIKit and not SpriteKit my CPU usage was 0. What could be using so much CPU? 当我在UIKit中制作相同的游戏而不是SpriteKit时,我的CPU使用率是0.什么可以使用这么多的CPU?

my tile class: 我的瓷砖类:

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")
    }

}

and my Sprite Kit scene code: 和我的Sprite Kit场景代码:

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 Simulator on Xcode have a much greater CPU Usage than in a real device. Xcode上的Iphone Simulator比实际设备具有更高的CPU使用率。

Test in a real device to have a real metric about CPU Usage. 在真实设备中测试,以获得有关CPU使用率的实际指标。

Tyshka, you need to reuse resources. Tyshka,你需要重用资源。 Your code creates a new SKTexture for the exact same input image data. 您的代码为完全相同的输入图像数据创建新的SKTexture。 Just create one SKTexture and then set that as the texture for the new node. 只需创建一个SKTexture,然后将其设置为新节点的纹理。 Add a map to your code so that the SKTexture can be checked and reused given the texture string name. 将代码添加到代码中,以便在给定纹理字符串名称的情况下检查并重用SKTexture。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM