前提: OpenGL 2.0 ES を使用する Cocos2D 2.0 を使用しています。
私のゲームには、すべてのレベル アセット(背景、敵、雲など) 用に 1 つのスプライトシートがあり、プレイヤー キャラクターのスプライトと HUD 要素用に 1 つ (通常、両方とも残りのアセットより上の z レベルにあります) があります。これは、ユーザーがプレーヤー スプライトを変更できるようにして、すべてのアセットを 1 つのスプライト シートに収めることができなかったためです。
2 つのスプライト シートと pvr.ccz 圧縮テクスチャ ファイルにも CCSpriteBatchNode を使用しています。問題は、状況によっては、異なるスプライト シート(レベル スプライト シート、プレイヤースプライト シート) にある一部のアセット(雲、プレイヤー、ボスの位置など)の絶対 Z レベルを変更する必要があることです。
2 つの実際的なケース シナリオ:
- one : プレーヤーを雲の下に移動させたいので、レベル アセット スプライト バッチ ノードに関しても、プレーヤーのスプライトの絶対 z 位置を動的に変更します。
- two : レベルのボスが到着したら、ボスをプレイヤーの上に飛ばしたいと思います (したがって、プレイヤーのスプライトの z レベルと比較して、絶対的な z レベルは +1 にする必要があります)。これには、z-buffering を有効にして vertexz を使用する必要があるようです。
現在、これを行う方法について混乱しています。私が知る限り、各スプライト シートは異なるノードと見なされ、したがって異なる OpenGL 呼び出しと見なされるためです ( z-buffering と vertexz を有効にすると、パフォーマンスが低下し、より多くの呼び出しが必要になりますか? )私を助けるかもしれないいくつかのチュートリアル/リファレンスがあるかどうか、および/または誰かが同様のケースシナリオの経験を共有できるかどうか疑問に思っています.