0

我们正在 cocos2d 中开发一款游戏,其中有可能会遇到一个琐事问题。琐事问题作为一个新的、透明的 CCLayer 实现在游戏板上,其中包含一个包含所有问题的 CCMenu。

我们的问题是我们似乎无法停止正确传播。当琐事菜单打开时,玩家应该无法点击棋盘层上的“掷骰子”按钮。

我们已经尝试通过dice.isTouchEnabled=NO;在添加琐事层之前调用来实现这一点,但我们无法弄清楚如何重新启用骰子按钮。

我们还尝试将ccTouchBeganNO 更改为 YES 以始终使用所有触摸,但随后它停止响应我们的菜单。看起来这应该是正确的做法,但是为什么菜单停止响应呢?

我们的教授建议实现一个回调函数,我们当然可以这样做,但看起来应该比这更容易。

有没有人有什么建议?

4

1 回答 1

2

我知道有两种方法可以做到这一点。

方法1(我正在使用的方法)

  1. 在弹出琐事问题之前,请使用以下功能禁用 Underlying Scene 节点上的菜单。该方法是一种递归方法,因此它也会禁用节点子节点上的所有菜单。

  2. 当琐事问题被解除时,发送一个 NSNotification 将被底层场景节点接收,并将重新启用节点及其子节点上的菜单。你可以使用 NSNotification 的 block 方法来缩短你的代码。

文档addObserverForName:object:queue:usingBlock:

(void) MenuStatus:(BOOL)_enable Node:(id)_node {

    for (id result in ((CCNode *)_node).children) {
        if ([result isKindOfClass:[CCMenu class]]) {
            for (id result1 in ((CCMenu *)result).children) {
                if ([result1 isKindOfClass:[CCMenuItem class]]) {
                    ((CCMenuItem *)result1).isEnabled = _enable;
                }
            }
        }
        else
            [self MenuStatus:_enable Node:result];
    }
}

方法二

创建一个不可见的图层,它将吞噬 Trivia Question 图层下方的所有内容。这是您可以尝试的课程:https ://gist.github.com/christophercotton/1563708

于 2013-04-10T03:13:32.310 回答