CCSpriteBatch ノードは、visible プロパティが true に設定されたスプライトのみを描画しますか?
それとも画面サイズも考慮?言い換えると。ノード内のスプライトが画面の外にある場合、opengl 描画呼び出しのパフォーマンスはそれを反映しますか?
CCSpriteBatch ノードは、visible プロパティが true に設定されたスプライトのみを描画しますか?
それとも画面サイズも考慮?言い換えると。ノード内のスプライトが画面の外にある場合、opengl 描画呼び出しのパフォーマンスはそれを反映しますか?
いいえ、いいえ。
CCSpriteBatchNode は常にすべての子スプライトを描画します。visible = NO のスプライトが画面に表示されない理由は正確にはわかりませんが、技術的には毎回すべてのクワッドを描画します。また、画面領域も考慮されていません。
バッチ化されていないスプライトは、異なる動作をします。バッチ化されていないスプライトが表示されない場合は、単に描画されていません。ただし、画面外のスプライトは描画されます。Cocos2D には、画面/ウィンドウ境界外のノードの描画をスキップする機能はありません。
以下は、私が過去数年間に読んだことからの伝聞ですので、一粒の塩でそれを取ってください:
バッチ処理されたスプライトが多すぎると、それらが表示されていない場合や画面の外にある場合でも、パフォーマンスに悪影響を及ぼします。GPU は、完全に画面の外にあるために見えないクワッドの描画をキャンセルする責任があります。これらのクワッドを処理する必要があります。
これは、cocos2d のタイルマップ実装の主な問題であり、大きなタイルマップで非常に遅い理由です。内部的には、タイルマップも同じスプライト バッチ テクニックを使用します。