我有3个不同的班级Tree
,Fruit
和Basket
。他们每个人都有自己的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 );
}
我正在考虑的解决方案是
MainLayer
的引用传递给每个类,并使成员变量保持该引用。还有其他可能的解决方案吗?我只觉得我目前的设置很脏而且不稳定。提前谢谢。
答案 0 :(得分:1)
我真的不知道任何c ++,但可能尝试使用MainLayer作为参数制作构造函数,然后只使用引用调用addChild。您也不需要成员变量来保存引用,您可以调用removeFromParentAndCleanup。
您还可以创建一个包含对当前MainLayer的引用的单例对象,然后您可以从任何地方调用单例,但这听起来更昂贵。我会选择你的#1解决方案。
答案 1 :(得分:0)
怎么样:
MainLayer.h
public:
static MainLayer* me = 0;
init()
中的MainLayer.cppMainLayer::me = this;
然后在你的draw()
if(MainLayer::me){
MainLayer::me->addChild();
}