【问题标题】:Cocos2d-x - How can I add a sprite in the GameScene which is called from another class?Cocos2d-x - 如何在 GameScene 中添加从另一个类调用的精灵?
【发布时间】:2023-04-11 02:08:01
【问题描述】:

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

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

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

【问题讨论】:

  • 如需更好的回复,请使用gaming.stackexchange.com
  • 首先您需要创建精灵并添加 GameScene 的 init 方法,然后将 HelloWorldScene 替换为 GameScene。查看 TestCpp 中的 SceneTest 示例
  • @Cocos2dx :例如,我有 2 个类:GameScene 和 Board 是一个普通类。在 GameScene 的 init 方法中,我调用 board->initBoard() ,其中 board 是 Board 类的对象。如何在 initBoard() 中添加 addChild(sprite) ?
  • 您可以在 Board 类成员中发送 GameScene 的指针,如 initBoard(GameScene* pScene) 并将子对象添加到 pScene 对象。

标签: sprite cocos2d-x


【解决方案1】:

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

不好的方式

(在游戏场景中) 板*板=新板(); 这个->addChild(板); 板->initBoard();

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

即使我不喜欢它,它也会起作用。 还有一种方法是,

好的方法...

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

在游戏场景中...

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

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

#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__

 ...
 ...

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

体面的方式...

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多