我有3个不同的类Tree
,Fruit
和Basket
。他们每个人都有自己的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
的引用传递给每个类,并让一个成员变量保存该引用。 还有其他可能的解决方案吗?我只是觉得我当前的设置肮脏且不稳定。提前致谢。
最佳答案
我真的不了解任何c++,但也许尝试使用MainLayer作为参数构造一个构造函数,然后仅使用引用调用addChild。您也不需要成员变量来保存引用,而是可以调用removeFromParentAndCleanup。
您还可以创建一个单例对象,该对象包含对当前MainLayer的引用,然后可以从任何地方调用单例,但这听起来更昂贵。我只会选择您的#1解决方案。