問題タブ [ccspritebatchnode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocos2d-x - cocos2d、別のバッチ ノードで子を並べ替える
格闘ゲームを作っています。ヒーロー用のスプライトシートとモンスター用のスプライトシートがあります。両方とも複数の攻撃を行うことができるため、それらを 1 つのスプライトシートにマージすることは避けたいと思います。そして、より多くのキャラクターを作成するつもりです。
今、各スプライトシートの SpriteBatchNode を作成し、それらをレイヤーに追加しています。
これで、 に 1 つのスプライトcharacterHeroBatchNode
と に複数のスプライトができましたcharacterMonsterBatchNode
。
PositionY 属性に基づいて、モンスターとヒーローの z オーダーを並べ替えるにはどうすればよいですか。
例えば>
主人公の後ろにモンスター1が欲しい。そしてモンスター2の主人公。
objective-c - CCSpriteBatchNode を切り替えるパフォーマンス的な方法は何ですか?
CCSpriteBatch ノードからテクスチャ アトラスを切り替える必要があります。私が選んだアプローチは、プレイ可能なキャラクターが特定の X 軸 (700) に到達した後、ゲームがそれを変更するというものです。
視覚的には正常に動作しますが、問題は、変更中に画面が2〜3秒間フリーズし、コンソールでメモリ警告が表示されることです。
CCSpriteBatchNode を切り替える適切な (最も軽い) 方法はどうすればよいのか疑問に思うのは、私だけではないと思います。
以下の現在の切り替えコードを参照してください。
ありがとう
cocos2d-iphone - CCSpriteBatchNodes を使用するタイミングを理解していますか?
CCSpriteBatchNode のソース コードを含むいくつかの場所で、そこから子を追加/削除するのは「高価」であることを見てきました。私の理解では、バッチ ノードを使用することの全体的なポイントは、同じスプライト シートからの多くのスプライトが同じコンテナに追加されているときに、高価な OpenGL 呼び出しが何度も発生するのを防ぐことです。
私が疑問に思っているのは、1) 子をスプライト バッチ ノードに追加/削除するのに「費用がかかる」こと、および 2) いつ使用するのが適切であると考えられるかということです。
たとえば、10 個のスプライトを作成するレーザー オブジェクトがあります...画面上を移動すると、その特定の画面位置の現在のスプライトを表示/非表示にします。画面の右端に到達すると、レーザー オブジェクトが破棄され、10 個のスプライトも破棄されます。それで、私が思っていたのは、これはスプライト バッチ ノードを使用するのに適切ではないということでしょうか。それは 10 個のスプライトしかなく、非常に高速に発生するためです。移動アニメーションは 0.2 秒なので、プレーヤーがすばやく発砲した場合、それはバッチ ノードに 10 個のスプライトを何度も追加/削除することを意味します...
別のケースでは、SpriteBatchNode をさまざまなオブジェクトに対して既にセットアップしており、追加する必要がある 1 回限りのスプライトに出くわすことがあります。それはたまたま同じスプライト シートの一部であるため、追加したくなります。そこにあるのでそのバッチノードに、そしてそれはすでにその特定のスプライトシートに指定されています......とにかく、このトピックについて明確にしたいと思います。
cocos2d-iphone - 通常の CCSprite を CCSpriteBatchNode に追加するとクラッシュします
ログでこの例外が発生しています
私がやろうとしているのは、通常の「myfile.png」ファイルをSpriteBatchNode
**バッチノードの宣言
** 利用方法
このラインは完璧に機能します
しかし、直接 *.png ファイルを使用してバッチ ノードに追加すると、クラッシュします。
オンラインでクラッシュする
さらにデバッグすると、次のことがわかりました。
アサーションの失敗はファイルにありますCCSpriteBatchNode.m
内部メソッド-(void) addChild:(CCSprite*)child z:(NSInteger)z tag:(NSInteger) aTag
行でNSAssert( child.texture.name == textureAtlas_.texture.name, @"CCSprite is not using the same texture id");
PS:「通常」とは、* .plistファイルから取得されていないことを意味します
cocos2d-x - アルファ テクスチャを SpriteBatchNode にバインドする方法は?
アルファ テクスチャを SpriteBatchNode にバインドする方法を教えてください。テクスチャ アルファとオリジンの両方を使用するシェーダーがあります。Sprite を拡張し、それにアルファ テクスチャをバインドすると、正常に動作します。しかし、cocos2d-x v3 でテクスチャを SpriteBatchNode にバインドする方法がわかりません。私を助けてください。ありがとう
SpriteBatchNode では、init メソッドと execute メソッドを持つ BatchCommand を使用します。execute メソッドでは、CCBatchCommand.cpp にあるこのソースをメイン テクスチャにバインドします。私の理由で、SpriteBatchNode から継承した独自の ExtBatchNode があります。
ExtBatchNode の draw メソッドで、さまざまな方法で myAlpha テクスチャをバインドしようとしています