我有3个不同的类TreeFruitBasket。他们每个人都有自己的CCSprite成员,我可以通过getSprite( )访问(每个类都有自己的getSprite( ))。而且,每个类都有一个draw( )方法,该方法设置CCSprite的纹理,位置以及其他与CCSprite相关的东西。当我创建这些类的实例时,总是需要在主层中对每个这些sprite进行addChild( )编码。其实没有什么错,但是我想要它,以便每个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 );
}

我在想的解决方案是
  • 将对MainLayer的引用传递给每个类,并让一个成员变量保存该引用。
  • 使所有类均从CCNode继承,以便它们可以拥有自己的子代。

  • 还有其他可能的解决方案吗?我只是觉得我当前的设置肮脏且不稳定。提前致谢。

    最佳答案

    我真的不了解任何c++,但也许尝试使用MainLayer作为参数构造一个构造函数,然后仅使用引用调用addChild。您也不需要成员变量来保存引用,而是可以调用removeFromParentAndCleanup。

    您还可以创建一个单例对象,该对象包含对当前MainLayer的引用,然后可以从任何地方调用单例,但这听起来更昂贵。我只会选择您的#1解决方案。

    09-09 19:31