我有3个不同的类Tree、Fruit和Basket。每个类都有自己的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 );
}我正在考虑的解决方案是
MainLayer的引用传递给每个类,并让一个成员变量保存该引用。还有其他可能的解决办法吗?我只是觉得我现在的设置是肮脏和不稳定的。提前谢谢。
发布于 2012-08-28 20:40:09
我并不真正了解任何c++,但可能尝试使用MainLayer作为参数创建一个构造函数,然后使用引用调用addChild。您也不需要一个成员变量来保存引用,您可以调用removeFromParentAndCleanup。
您还可以创建一个保存对当前MainLayer的引用的单例对象,然后可以从任何地方调用该单例对象,但这听起来更昂贵。我只想用你的第一种解决方案。
发布于 2012-08-29 01:53:27
不如:
MainLayer.h
public:
static MainLayer* me = 0;init()中的MainLayer.cpp
MainLayer::me = this;然后在你的抽签()
if(MainLayer::me){
MainLayer::me->addChild();
} https://stackoverflow.com/questions/12153561
复制相似问题