2016-03-29 5 views
1

私はiOSでタイルベースのアドベンチャーゲームを作っています。現在、私のレベルのデータは100x100の配列に保存されています。私は私のレベルのデータを表示するための2つのアプローチを検討しています。最も簡単な方法は、各タイルに対してSKSpriteNodeを作ることです。しかし、私はiOSデバイスが10,000ノードのための十分なメモリを持っているかどうか疑問に思っています。そうでない場合は、必要に応じてレベルデータからノードを作成して削除することができます。SKSpriteNodesのメモリ使用

+0

のためにメモリ内のすべての10000枚のタイルを格納する必要ない場合でも、あなたは多くのアプローチがあります。 100x100のタイルを1つの巨大なスプライトノードに変えたり、元のテクスチャタイルをメモリにキャッシュしたり、画面上にタイルがどれだけぴったり合っているかのタイルセットを作成したり、幅と高さに合わせたりできます。あなたのノードをスプライトの代わりに使うことができます(あなたがたくさんのタイルをスワップしないようにするには、スクリーンを1メガタイルにして、タイルを非表示領域に追加してからスクロールした後、新しいテクスチャです。説明が残念です – Knight0fDragon

+0

@ Knight0fDragonこれらのアプローチはうまくいきましたが、いくつか試しましたが、ゲームでランダムマップを生成しているので、SKNodesの機能があれば簡単になります。それぞれの個別のタイル。 –

+1

なぜそれがSKNodeでなければならないのですか?無作為マップは、10,000要素のInt配列、10,000 SKNodesよりもはるかに少ない空間、または私が言ったように、1つのノードに巨大なテクスチャ(またはサイズが最大のテクスチャを超える場合はさらにカップルしてください)あなたは、すべてのリソースを消費して運が欲しいのではなく、他のアプリでマルチタスクを実行していることを記憶しています。中断された状態 – Knight0fDragon

答えて

1

私はこれがTiledで動作することを意味していることは知っていますが、ここに記載されているコードは、あなたが探しているものを最適化するのに役立ちます。私はあなたが作っているような大きな地図のために最適化するために全力を尽くしました。見るべき大きなことは、私が過去に大きな殺人者であったことを知っているテクスチャをどうやって作り出すかです。

スウィフト https://github.com/SpriteKitAlliance/SKATiledMap

オブジェクト-C https://github.com/SpriteKitAlliance/SKAToolKit

の両方が、あなたはまだ長いとタイルエディタを使用することなく、ランダムマップを生成することができチャンスがあるので、あまりにもJSON文字列にロードするように設計されています期待どおりのフォーマットに合っています。我々はより多くの最近の親からノードを削除したとして

また、あなたは、Objective-Cのバージョンで作品を殺処分する方法を見て検討する必要がありますうまくいけば、あなたはその役に立つのいくつかを見つけるのiOS 9.

に本当に最適化された性能を有しますご不明な点がございましたら、私にメールでお気軽にお問い合わせください。

編集

別のオプションは、オブジェクトプーリングを見ることであろう。コアコンセプトは、表示する必要があるスプライトのみを作成し、完了したらいつでも並べ替えて保存することです。新しいスプライトが必要なときは、コレクションに1つを要求し、それがなければ新しいコレクションを作成します。

たとえば、芝生のタイルが必要です。芝生のタイルが必要です。芝生のタイルが必要です。すでに作成されているので、使用するのを待っているタイルが作成されていません。あなたは画面をいっぱいにするために9×7のグリッドを埋めるためにこれを行うことがあります。移動した芝生を離すと、新しい列が来て草が必要になったときに再び使用するために、画面にスクリーンが投げ込まれます。あなたがやっていることすべてがタイルを表示しているなら、これは本当にうまくいく。タイルが更新される必要のある動的プロパティを持っていて、本質的にユニークである場合、それほど素晴らしいものではありません。ここで

は偉大なリンクであることがユニティ=)

https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling