在Iphone的cocos2d中禁用CCSprite或CCScene上的用户交互

在Iphone的cocos2d中禁用CCSprite或CCScene上的用户交互,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我正在用cocos2d在Iphone上开发一个游戏。我有一个包含20个CCSprite的CClayer。我正在播放声音,我想在播放声音时禁用所有CCSprite或整个层上的触摸事件。我查看了名为isTouchEnabled的CCLayer属性,但该行为不会传播到子对象(所有CCSprite)。除非没有文档记录,否则CCsprite似乎没有等效的属性。有人知道一个简单的方法吗? 谢谢另一个论坛的成员发布了此解决方案 那么你所有的精灵通常都会收到触摸事件?如果你知道声音何时播放,你可以让他们检查一下

我正在用cocos2d在Iphone上开发一个游戏。我有一个包含20个CCSprite的CClayer。我正在播放声音,我想在播放声音时禁用所有CCSprite或整个层上的触摸事件。我查看了名为isTouchEnabled的CCLayer属性,但该行为不会传播到子对象(所有CCSprite)。除非没有文档记录,否则CCsprite似乎没有等效的属性。有人知道一个简单的方法吗?
谢谢

另一个论坛的成员发布了此解决方案

那么你所有的精灵通常都会收到触摸事件?如果你知道声音何时播放,你可以让他们检查一下,如果声音正在播放,就忽略触摸。例如,如果您的精灵实现了CCTargetedTouchDelegate协议,您可以执行以下操作:

- (BOOL)ccTouchBegan:(UITouch*)touch withEvent:(UIEvent*)event {
    if (soundIsPlaying) {
        return NO; // i.e., the sprite is currently uninterested in the touch
    }
    // Other checks and behaviour here.
    return YES;
}

使用下面的方法禁用视图下面层上的CCMenu项目可能会对您有所帮助

调用下面的方法并禁用所有子菜单或子节点。

[自菜单状态:无节点:自];//禁用

方法是:

-(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];

    }
}

[self MenuStatus:YES Node:self];  // to enable**