gpt4 book ai didi

c++ - 从类访问主场景/层

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:50 24 4
gpt4 key购买 nike

我有 3 个不同的类 TreeFruitBasket。他们每个人都有自己的 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 );
}

我想到的解决方案是

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

还有其他可能的解决方案吗?我只是觉得我目前的设置很脏而且不稳定。提前致谢。

最佳答案

我真的不懂任何 C++,但也许可以尝试使用 MainLayer 作为参数创建构造函数,然后使用引用调用 addChild。您也不需要成员变量来保存引用,您可以改为调用 removeFromParentAndCleanup。

您还可以创建一个包含对当前 MainLayer 的引用的单例对象,然后您可以从任何地方调用该单例,但这听起来更昂贵。我会选择您的 #1 解决方案。

关于c++ - 从类访问主场景/层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com