从类访问主场景/图层

时间:2012-08-28 06:03:19

标签: c++ cocos2d-x

我有3个不同的班级TreeFruitBasket。他们每个人都有自己的CCSprite成员,我通过getSprite( )访问(每个类都有自己的getSprite( ))。此外,每个班级都有一个draw( )方法,用于设置CCSprite的纹理,位置和其他CCSprite相关内容。当我创建这些类的实例时,我总是需要addChild( )主层中的每个sprite。没有什么是真正的错误,但我希望它能使每个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,以便他们可以拥有自己的子级。
  3. 还有其他可能的解决方案吗?我只觉得我目前的设置很脏而且不稳定。提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

怎么样:

MainLayer.h

public:
static MainLayer* me = 0;

init()

中的MainLayer.cpp
MainLayer::me = this;

然后在你的draw()

if(MainLayer::me){
    MainLayer::me->addChild();
}