私のアプリの一部は風景を示していますが、今のところそれはちょっと退屈です。したがって、画面上でいくつかのパーティクルをアニメーション化することを計画しています(小さな翼のようなものを考えてください-http://www.youtube.com/watch?v=DpmcX- rWGfs)。ただし、組み込みのパーティクルシステムはまだ見つかりません。どうすればこれをメモリ効率よく行うことができますか?私はすでにCADisplayLinkを使用して風景上をアニメーション化するいくつかの雲のために独自のアニメーションシステムを実装しました、そしてそれはちょっと遅いです(私はそれをすぐに速くしたいと思っていますが)。一度に20個の小さなポイントをアニメーション化するような、別の非常に重いシステムは、おそらくそれを壊します。
4 に答える
組み込みのパーティクルシステムはまだ見つかりません。
そこにパーティクルシステムを組み込むいくつかの「無料」プロジェクトがあります。あなたが言及するニーズに対して十分に効率的であるパーティクルシステムについては、このビデオチュートリアルにアクセスできます。パーティクルシステムを作成するこの方法は、基本的にCocos2dが使用している方法と同じです。チュートリアルを見て、プロジェクトファイルをダウンロードすると、パーティクルエミッタをプロジェクトに簡単に埋め込むことができます。
どうすればこれをメモリ効率よく行うことができますか?
「オブジェクトプールパターン」を使用することをお勧めします。基本的には、パーティクルの「プール」、たとえば1000個のオブジェクトを事前に割り当てます。次に、エミッターは、必要なときにプールにパーティクルを要求します。プールが空になった場合は、それに応じてケースを管理できます。これはメモリの観点からは効率的に見えないかもしれませんが、パフォーマンスに関しては非常に効率的です(パーティクルなどの多くの小さなオブジェクトのリアルタイム割り当てを回避するため)。
いくつかの提案は、パーティクル構造が軽量で2の累乗に調整されることを宣言する場合(これにより、構造がよりキャッシュフレンドリーになります)、これは32バイトです。
struct Particle
{
CGPoint position;
CGPoint speed;
float life;
float decay;
unsigned short index;
unsigned char color_R;
unsigned char color_G;
unsigned char color_B;
unsigned char color_A;
unsigned char rotation;
};
ただし、ニーズによっては、これははるかに小さい場合があります。おそらく、色/インデックスなどは実際には必要ありません。あなたはそれを自分で評価しなければならないでしょう。
最後に、cocos2dクラスを確認することをお勧めします。ここCCParticleSystem
からコードをダウンロードできます。それらの実装はそれほど軽量ではありませんが、非常に柔軟性があり、非常に優れた効果を実現できます。
あなたの粒子で頑張ってください:)
MattDranceが書いた新しい本iOSRecipesをチェックする必要があります。
http://pragprog.com/titles/cdirec/ios-recipes
レシピの中には、組み込みのCoreAnimation CAReplicatorLayerを使用して、「単純なエミッターの構築」でエミッターを構築するものがあります。
この本はまだアルファ版ですが、今すぐ購入すると、完成したときに最新情報を入手できます。
Cocos2Dは、レンダリングにOpenGLES1を使用する2Dグラフィックエンジンです。パーティクルシステムが組み込まれています。パーティクルエンジンのコードは非常に単純です。VBOを使用して、パーティクルのテクスチャクワッドを描画します。あなたはそれをあなた自身のニーズに適応させることができるはずです。
iOS5以降をターゲットにする場合は、OSの組み込み機能であるCAEmitterLayerを使用できます。