1

我有 3 个不同的课程Tree,FruitBasket。他们每个人都有自己的CCSprite成员,我可以通过这些成员访问getSprite( )(每个班级都有自己的成员getSprite( ))。此外,每个类都有一个draw( )设置CCSprite纹理、位置和其他CCSprite相关内容的方法。当我创建这些类的实例时,我总是需要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 );
}

我正在考虑的解决方案是

  1. 将引用传递MainLayer给每个类,并有一个成员变量保存该引用。
  2. 使所有类都从 CCNode 继承,以便它们可以拥有自己的子级。

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

4

2 回答 2

1

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

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

于 2012-08-28T20:40:09.903 回答
0

怎么样 :

主层.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 回答