首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从类中访问主场景/层

从类中访问主场景/层
EN

Stack Overflow用户
提问于 2012-08-28 06:03:18
回答 2查看 1.1K关注 0票数 1

我有3个不同的类TreeFruitBasket。每个类都有自己的CCSprite成员,我通过getSprite( )访问它们(每个类都有自己的getSprite( ) )。另外,每个类都有一个draw( )方法来设置CCSprite的纹理、位置和其他与CCSprite相关的东西。当我创建这些类的实例时,我总是需要在主层上对每个精灵进行addChild( )。实际上没有什么问题,但我希望它能够使每个draw( )方法都是处理主层addChild( )方法的方法。

我的代码是这样的:

代码语言:javascript
复制
// 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( )方法看起来类似于以下内容:

代码语言:javascript
复制
void Tree::draw( ) {
   m_TreeSprite = CCSprite::create( "tree.png" );
   m_TreeSprite -> setPosition( 100, 100 );
   MainLayer -> addChild( m_TreeSprite );
}

我正在考虑的解决方案是

  1. 将对MainLayer的引用传递给每个类,并让一个成员变量保存该引用。
  2. 使所有类都继承自CCNode,这样它们就可以拥有自己的子类。

还有其他可能的解决办法吗?我只是觉得我现在的设置是肮脏和不稳定的。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-28 20:40:09

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

您还可以创建一个保存对当前MainLayer的引用的单例对象,然后可以从任何地方调用该单例对象,但这听起来更昂贵。我只想用你的第一种解决方案。

票数 1
EN

Stack Overflow用户

发布于 2012-08-29 01:53:27

不如:

MainLayer.h

代码语言:javascript
复制
public:
static MainLayer* me = 0;

init()中的MainLayer.cpp

代码语言:javascript
复制
MainLayer::me = this;

然后在你的抽签()

代码语言:javascript
复制
if(MainLayer::me){
    MainLayer::me->addChild();
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12153561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档