1

、、、の3 つの異なるクラスTreeFruitありBasketます。それらのそれぞれにはCCSprite、私がアクセスする独自のメンバーがありますgetSprite( )(各クラスには独自の がありますgetSprite( ))。また、各クラスには、のテクスチャ、位置、およびその他の関連するものdraw( )を設定するメソッドがあります。これらのクラスのインスタンスを作成するときは、常にこれらの各スプライトをメイン レイヤーに配置する必要があります。実際には何も問題はありませんが、各メソッドがメインレイヤーへのメソッドを処理するメソッドになるようにしたいです。CCSpriteCCSpriteaddChild( )draw( )addChild( )

私のコードは次のようなものです:

// Tree.cpp
#include "Tree.h"
#include "cocos2d.h"

using namespace cocos2d;

Tree::Tree( ) {
   draw( );
}

CCSprite * Tree:getSprite( ) {
   return m_TreeSprite;
}
void Tree::draw( ) {
   m_TreeSprite = CCSprite::create( "tree.png" );
   m_TreeSprite -> setPosition ( 100, 100 );
}

/*
 * The other classes have similar structure. Will take a long long post if I write them all.
 */ 

// MainLayer.cpp
void MainLayer::drawScreenObjects( ) {
   m_Tree = Tree( );
   this -> addChild( m_Tree.getSprite( ) );

   m_Basket = Basket( );
   this -> addChild( m_Basket.getSprite( ) );
}

draw( )メソッドが次のようになるようにします。

void Tree::draw( ) {
   m_TreeSprite = CCSprite::create( "tree.png" );
   m_TreeSprite -> setPosition( 100, 100 );
   MainLayer -> addChild( m_TreeSprite );
}

私が考えている解決策は

  1. MainLayerへの参照をすべてのクラスに渡し、メンバー変数にその参照を保持させます。
  2. すべてのクラスを CCNode から継承して、独自の子を持つことができるようにします。

他に考えられる解決策はありますか?現在のセットアップが汚れていて不安定だと感じています。前もって感謝します。

4

2 に答える 2

1

私はc ++を本当に知りませんが、MainLayerをパラメーターとしてコンストラクターを作成してから、参照を使用してaddChildを呼び出してみてください。また、参照を保持するためのメンバー変数も必要ありません。代わりに removeFromParentAndCleanup を呼び出すことができます。

現在の MainLayer への参照を保持するシングルトン オブジェクトを作成して、どこからでもシングルトンを呼び出すこともできますが、それはより高価に聞こえます。私はあなたの#1のソリューションに行きます。

于 2012-08-28T20:40:09.903 に答える
0

どうですか :

MainLayer.h

public:
static MainLayer* me = 0;

init() の MainLayer.cpp

MainLayer::me = this;

次に、 draw()

if(MainLayer::me){
    MainLayer::me->addChild();
} 
于 2012-08-29T01:53:27.940 に答える