从类访问主场景/层

Access the Main Scene / Layer from a class

本文关键字:访问      更新时间:2023-10-16

我有三个不同的类TreeFruitBasket。它们中的每一个都有自己的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继承,以便它们可以拥有自己的子类

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

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

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

怎么样:

MainLayer.h

public:
static MainLayer* me = 0;

init()中的MainLayer.cpp

MainLayer::me = this;

然后在你的提款()

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