Cocos2d-x - 如何在GameScene中添加一个从另一个类调用的精灵?

时间:2014-04-10 07:25:11

标签: sprite cocos2d-x

我有一个类似于项目模板中的HelloWorldScene的GameScene类。如何使用另一个类中的addChild方法在GameScene的场景中添加精灵和显示?

示例,我有2个类:GameScene和Board是普通类。在GameScene的init方法中,我使用board调用board-> initBoard()是Board类的对象。我如何在initBoard()中添加addChild(sprite)?

我尝试了一些方法,但它仍然没有成功。我使用的是Cocos2d-x v3.0rc1。

1 个答案:

答案 0 :(得分:0)

首先,这是一个糟糕的设计!为什么子类在初始化时会向其父级添加内容? 但如果这是一个要求,那么我会做类似的事情,

  
    
      

糟糕的方式

    
  

(在GameScene中)     Board * board = new Board();     这 - >的addChild(板);     板级> initBoard();

meanwhile in boardclass,
void Board::initBoard(){
.
.
.
 getParent()->addChild(sprite);
}

即使我不喜欢它,它也会起作用。 另一种方式是,

  
    
      

好的方式......

    
  
Board::initBoardWithParent(GameScene* scene){
.
.
.
 scene->addChild(sprite);
}

在GameScene ......

Board* board = new Board();
board->initBoardWithParent(this);

在这种情况下(对某些人来说),错误开始弹出...所以确保你的场景是用预处理器声明的...否则会让你的编译器尖叫,因为它会疯狂编译GameScene,因为它正在使用董事会本身正在使用GameScene ...

#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__

 ...
 ...

class GameScene :  ....
#endif // __GAME_SCENE_H__
  
    
      

体面的方式......

    
  

另一方面,你会覆盖你的Board类的ADDCHILD方法...... 当你这样做时,请确保传递一个额外的参数,表明这是一个特殊的ADDCHILD,并且一旦你到达那里......使用前面提到的两种方法中的任何一种将精灵添加到GameScene对象。

希望这有帮助!