2016-03-05 11 views
5

Sto facendo un semplice gioco basato su tile in SpriteKit e sto avendo qualche difficoltà con l'utilizzo elevato della CPU nel mio gioco. Ho una mappa composta da 60 tessere e ogni tessera è una sottoclasse di SKSpriteNode. La semplice visualizzazione di questi 60 folletti nella scena utilizza fino all'80% della CPU nel simulatore di iPhone 6s. Non c'è movimento, interazione dell'utente o fisica in corso. Quando ho realizzato lo stesso gioco in UIKit e non in SpriteKit, il mio utilizzo della CPU era 0. Quale poteva essere l'utilizzo di così tanta CPU?Utilizzo della CPU molto elevato in SpriteKit

la mia classe di piastrelle:

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

} 

e la mia Sprite Codice Kit scena:

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 */ 
    } 
} 

risposta

9

Iphone Simulator su Xcode hanno una molto maggiore utilizzo della CPU che in un dispositivo reale.

Test in un dispositivo reale per avere una metrica reale sull'utilizzo della CPU.

+0

Grazie! Fino al 10% sul telefono reale. –

+1

@ATyshka Se questa risposta ha risolto il problema, contrassegnarlo come [accettato] (http://stackoverflow.com/help/accepted-answer). – Whirlwind

+0

Siamo spiacenti! Sono nuovo di questo sito –

1

Tyshka, è necessario riutilizzare le risorse. Il codice crea una nuova SKTexture per gli stessi dati di immagine di input. Basta creare uno SKTexture e impostarlo come trama per il nuovo nodo. Aggiungi una mappa al tuo codice in modo che SKTexture possa essere controllato e riutilizzato dato il nome della stringa di texture.

+0

Sì, l'ho capito. Risolverà! –

Problemi correlati