gpt4 book ai didi

ios - 在 cocos2d 中停止触摸传播

转载 作者:行者123 更新时间:2023-11-28 22:36:11 24 4
gpt4 key购买 nike

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

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

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

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

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

有人有什么建议吗?

最佳答案

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

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

  1. 在弹出琐事问题之前,使用下面的函数禁用底层场景节点上的菜单。该方法是一种递归方法,因此它也会禁用节点子节点上的所有菜单。

  2. 当琐事问题被驳回时,发送一个 NSNotification,该 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 层下方的所有触摸。这是您可以尝试的类(class):https://gist.github.com/christophercotton/1563708

关于ios - 在 cocos2d 中停止触摸传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914111/

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