2016-03-05 4 views
5

私はSpriteKitで単純なタイルベースのゲームを作っています。私はゲームで高いCPU使用率でいくつかの問題を抱えています。私は60のタイルで作られたマップを持っていて、各タイルはSKSpriteNodeのサブクラスです。シーンにこれらの60のスプライトを表示するだけで、iPhone 6sシミュレータのCPUの最大80%を使用しています。動作、ユーザーのやりとり、または物理的な動作はありません。私がSpriteKitではなくUIKitで同じゲームを作ったとき、私の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") 
    } 

} 

と私のスプライトキットのシーンコード:Xcodeの上

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

答えて

9

iPhoneのシミュレータは、実際のデバイスに比べてはるかに大きいCPU使用率を持っています。

実際のデバイスでCPU使用率に関する実際のメトリックをテストします。

+0

ありがとうございます!実際の電話では10%まで低下します。 –

+1

@ATyshkaこの回答があなたの問題を解決した場合は、それを[承諾](http://stackoverflow.com/help/accepted-answer)としてマークする必要があります。 – Whirlwind

+0

申し訳ありません!私はこのサイトの初心者です –

1

Tyshka、あなたはリソースを再利用する必要があります。あなたのコードは全く同じ入力画像データのために新しいSKTextureを作成します。 1つのSKTextureを作成し、それを新しいノードのテクスチャとして設定するだけです。コードにマップを追加して、テクスチャ文字列の名前を指定してSKTextureをチェックして再利用できるようにします。

+0

うん、私はそれを実現しました。修正されます! –

関連する問題