【问题标题】:hot to disable touch handling in CCLayer in cocos2d在 cocos2d 中禁用 CCLayer 中的触摸处理
【发布时间】:2011-01-07 13:14:55
【问题描述】:

我有一个 CCLayer 子类,用于显示一些精灵并显示一些动画。它还有一个带有一些项目的 CCMenu。当用户选择一些菜单项时,我想运行动画然后显示另一个场景。但我希望用户在动画运行时不能触摸屏幕上的任何东西。

当然,我可以在回调中禁用触摸处理,但也许有更简单的方法 - 只是暂时禁用所有触摸处理?

【问题讨论】:

标签: iphone objective-c cocos2d-iphone


【解决方案1】:

在动画运行前禁用触摸调度器,在动画停止后启用触摸调度器。这是代码sn-p:

[[CCDirector sharedDirector] touchDispatcher].dispatchEvents = NO;
CCAnimation* animation = [CCAnimation animationWithFrame:@"numberexplode" frameCount:5 delay:0.2];
CCAnimate* animate = [CCAnimate actionWithAnimation:animation];
CCCallBlock* completion = [CCCallBlock actionWithBlock:^{
    [[CCDirector sharedDirector] touchDispatcher].dispatchEvents = YES;
}];
CCSequence* sequence = [CCSequence actions:animate, completion, nil];
[self runAction:sequence];

【讨论】:

  • 我没有得到touchDispatcher 方法。可能是什么问题。我正在使用 iOS6。
  • 您可以将 [[CCDirector sharedDirector] touchDispatcher] 替换为 [CCTouchDispatcher sharedDispatcher]
【解决方案2】:

您想查看CCTouchDispatcher 单例类。如果您添加一个吞下触摸(并且什么都不做)的有针对性的触摸处理程序,那么您将不会处理任何触摸。据我所知,没有办法完全禁用触摸。

或者,您可以创建一个新的 CCLayer,它位于其他所有内容之上(我认为 z 顺序非常高会做到这一点),并使其清晰,让它与触摸无关。

希望有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多