我有 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
的引用传递给每个类,并让一个成员变量保存该引用。
- 让所有类都继承自 CCNode,这样它们就可以拥有自己的子类。
还有其他可能的解决方案吗?我只是觉得我目前的设置很脏而且不稳定。提前致谢。
我真的不懂任何 C++,但也许可以尝试使用 MainLayer 作为参数创建构造函数,然后使用引用调用 addChild。您也不需要成员变量来保存引用,您可以改为调用 removeFromParentAndCleanup。
您还可以创建一个包含对当前 MainLayer 的引用的单例对象,然后您可以从任何地方调用该单例,但这听起来更昂贵。我会选择您的 #1 解决方案。
我是一名优秀的程序员,十分优秀!