2010-10-03 25 views
1

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

回答

1

另一个论坛的成员张贴了这个解决方案

因此,所有你的精灵正常接收触摸事件?如果您知道声音何时播放,您可以让他们检查声音,并在播放声音时忽略该声音。例如,如果你的精灵实现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; 
} 
2

我是个用下面的方法来对视图下面的层上禁用CCMenu项目的触摸可能会帮助你。

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

[self MenuStatus:NO Node:self]; //禁用

方法是:

-(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**