3

誰かが次のシナリオを検討し、私に提案を与えますか:私は1つのCCSpriteBatchNodeを持つ1つのGameplayLayerで基本的なcocos2dゲームを実装しています。次のような3つのCCSpriteを持つGameObject:CCNodeが1つあります。

CCSprite *bodySprite;    
CCSprite *hairSprite;   
CCSprite *eyesSprite;

初期化するときGameObject、私はGameObjectその子としてスプライトを次のように追加しています:

[self addChild:bodySprite];
[self addChild:hairSprite];
[self addChild:eyesSprite];

このようにして、ノード(GameObject)の位置や回転などを変更でき、すべてのスプライトは変更の影響を受けますが GameObjectシーンに複数のsを追加すると、 「各スプライトはそれ自体を描画します。これは、スプライトごとに1つの追加の描画呼び出しを意味します」

パフォーマンスの問題を修正するために、この投稿を読んだ後、次のように初期化時GameObjectに'sスプライトをGameplayLayer'sに追加することにしました。CCSpriteBatchNode

 [[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:bodySprite];
 [[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:hairSprite];
 [[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:eyesSprite];

今だけ、GameObjectスプライトの位置を1つずつ設定する必要があります。

self.position = ...

私は使用する必要があります

bodySprite.position = ...
hairSprite.position = ...
eyesSprite.postion =...

GameObjectこれは退屈な変更であり、スプライトの構成として自分を設計したことの最大の利点の1つを失います。

質問:ノードの位置を使用して、構成するスプライトの位置に影響を与える方法はありますか?それらを子として両方に追加できますGameObjectsceneSpriteBatchNode?正しいアプローチではない場合、スプライトの位置を1つずつ設定していますか?

4

1 に答える 1

1

まず、「主要なパフォーマンス」は相対的なものです。それが唯一のスプライトである場合、スプライトをバッチ処理しても効果は見られません。同時に画面に数十個表示されている場合は、別の話になります。

2つの親に同時にノードを追加することはできません。

できることは、「コンテナ」スプライトを作成することです。テクスチャ(スプライトバッチノードテクスチャと同じ)とCGRectEmptyをテクスチャrectとして使用してCCSpriteを作成します。これにより、スプライトは何も描画せず、CCSpriteBatchNodeに追加されたCCNodeであるかのように使用できます。

次に、スプ​​ライトをその非表示のスプライトに追加し、コンテナスプライトを使用して、以前と同じように子スプライトの位置や回転などに影響を与えることができます。

于 2012-12-03T09:25:43.953 に答える