2016-09-13 5 views
0

私はSwiftとSpriteKitで初めてのゲームを作っています。数分のゲームプレイの後にCPUの100%に近づく無数のCPUの問題に遭遇しました。私は実際に一度に20人のアニメーション敵を描くだけなので、このようなことは起こらないようです。唯一の問題ではありませんが、私は敵クラスをインスタンス化することがこの過度の使用に大きく貢献していると考えています。アニメーションを使用してSKSpriteNodesをリサイクルする方法

私のコードでは、数秒ごとに新しい敵エイリアンをインスタンス化します。接触したとき、またはスクリーンから離れるときに、適切に除去していることはかなり確信しています。だから私は次の試みが、それらを絶えず完全に取り除いて追加するのではなく、それらをリサイクルしようとするべきだと思う。

私は追加している:

func addNormAlien(){ 
    let mult = normAlienMultiplers 

    let alienInst = normAlien(startPos:CGPoint(x: 10,y: 10), speed: random(UInt32(10), max: UInt32(50))*mult[0]) 

    let yStart = random(UInt32(alienInst.size.height/2), max: UInt32(size.height-alienInst.size.height)) 
    alienInst.position = CGPoint(x:size.width+alienInst.size.width/2, y:yStart) 

    addChild(alienInst) 
    totalNodes+=1 
} 

と一般的な文で削除する:それは位置が特定のポイントを過ぎているXの場合は、両方の接触方法で、更新中alien.removeFromParent()

私はいくつかの最大数に適合する何らかの並べ替え(または待ち行列?)を作成できると思っていました。このようなSKSpriteNodeサブクラスをリサイクルする適切な方法はありますか? P.S. iPhoneでテストする際のCPU使用の適切な範囲は何ですか?

+0

これを今実行するかどうかはわかりません。これがあなたの最初の試合であり、前にあなたの質問のいくつかに答えた人物として、あなたはK.I.S.Sモデルに従いたいと思っています。 "20ish"の敵しかいない場合は、20以上の方法があるか、コード内で何か悪いことをしていることを示しています。オブジェクトキューに行っても、パフォーマンスは向上しますが、コードは修正されず、他の問題も発生します。私はこれまで、CPUの問題にどのようにアプローチするかについていくつか提案しました。 –

答えて

1

at the prototype patternをご覧ください。あなたは基本的に最初の敵だけを作成し、ゲームで使用するためにそれらをクローンします。少なくとも、これはファイルシステムのやりとり(テクスチャの読み込みなど)を減らすはずです。

+0

私は理解しているとは思えません。それは「クローニング」プロセスと同じくらい集中的ですが、状態を保存するのではないのですか?また、このような比較的単純な2Dゲームの場合、適切なCPUの使用がデバイス上にあるとしますか? – Sam

+0

敵を作成するたびにファイルシステムからテクスチャを再読み込みすると仮定します。ファイルシステムのやりとりは通常遅いです。プロトタイプを作成し、一度だけロードし、使用するたびに敵をクローンするだけで、これはメモリのやりとりに比べてはるかに高速です。あるいは、すべてのテクスチャを静的なクラスにプリロードすることもできます。これは簡単な方法です。 –

+0

ノード数(SKSceneのプロパティ)もチェックしてノードが正しく削除されるようにする必要があります。 –

関連する問題