【问题标题】:Cocos2d-x - Acces sprite from other classCocos2d-x - 访问其他类的精灵
【发布时间】:2016-11-28 22:04:09
【问题描述】:

我有一个由 Lobby 和 DrawingCanvas 组成的程序。

在大厅中有一个按钮 - 当您单击它时,它会转到 DrawingCanvas。 如果单击它,还会出现一个精灵。在 DrawingCanvas 中有一个后退按钮,可以让您前往大厅。当您单击后退按钮时,我想从大厅中消失精灵,这样您就可以在没有精灵的情况下拥有干净的大厅。在大厅我有:

Size visibleSize = Director::getInstance() -> getVisibleSize();
cocos2d::Sprite* notification = cocos2d::Sprite::create("NotificationM.png");
notification -> setAnchorPoint(Vec2(0, 0));
notification -> setScale(1.05);
notification -> setPosition(Vec2(150, visibleSize.height));
this -> addChild(notification);
notification -> setTag(99);

这里一切都很好。问题出在 DrawingCanvas 类中。

void DrawingCanvas::bckPressed(Ref *pSender, ui::Widget::TouchEventType eEventType)
{
if (eEventType == ui::Widget::TouchEventType::ENDED)
    {
        SceneManager::getInstance() -> returnToLobby(); 

        ? -> removeChildByTag(99);
    }
}

我不知道如何访问 Lobby 类,我的标记为 99 的精灵在哪里,或者从其他类访问通知精灵以隐藏它,例如,不删除。 :-(

【问题讨论】:

  • 在 Lobby 类中将通知精灵声明为静态,然后可以通过 DrawingCanvas 类轻松访问。

标签: c++ cocos2d-x


【解决方案1】:

显然您的 buttonLobby 的子级(可能不是直接的)。所以有两种基本的方法:

  1. 从按钮到父级并调用getParent()->removeChildByTag(99)
  2. 创建 按钮 时,请给它一个回调函数,其中包含您希望从 Lobby 调用的函数

第二种方法稍微复杂一些,但更健壮。

【讨论】:

  • 我的问题不是我不知道如何从大厅中删除 Sprite。我不知道如何从 DrawingCanvas 类中做到这一点。我不知道如何从 DrawingCanvas 中的 Lobby 访问 Sprite。我在第二个代码中放了问号,我不知道该写什么。
  • 我的错。没有注意到第二部分的课程名称。然后绘制一棵父子关系树,并通过一个共同的父级将它们连接起来。
  • 听起来很复杂 ;-) 任何线索如何做到这一点?
  • 只要弄清楚谁是 Lobby 和 Drawing canvas 的父级。如果没有共同的祖先 - 重复他们的父母等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
相关资源
最近更新 更多