Objective c 禁用ccTouche

Objective c 禁用ccTouche,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,我正在我的图层中设置触摸启用: [[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 稍后,如果我想禁用触摸:self.isTouchEnabled=NO它不工作。 如果我尝试使用以下选项禁用它: [[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self pr

我正在我的图层中设置触摸启用:

[[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
稍后,如果我想禁用触摸:
self.isTouchEnabled=NO它不工作。
如果我尝试使用以下选项禁用它:

[[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:NO];
没关系,但是如果我用相同的语法再次启用它,我会崩溃,因为已经添加了代理

如何动态禁用和启用触摸


谢谢。

如果它确实是一个CCLayer对象,只需使用isTouchEnabled即可。CCLayer对象将相应地添加/删除自身作为目标触摸代理。所以整个问题是“你说的“不工作”是什么意思?”。例如,如果您的层(禁用触摸)包含菜单,菜单仍将处于活动状态,并且它们具有非常高的触摸优先级,即响应触摸的不是层,而是其嵌入式菜单

直接来自CCLayer的代码(2.0版):


如您所见,基本的CCLayer代码已经实现了您试图手动完成的任务。只要使用该属性

cc touch dispatcher和self.istouchenabled是检测触摸的两种独立方法。我现在不在电脑前,我记不起确切的密码。我将要搭乘国际航班,所以如果您愿意等一天左右,我将用正确的方法更新此消息,以删除cctouch调度员。如果您不想等待,我建议您查看cocos2d文档。我敢肯定它显示了你在那里

self.istouchsenabled=NO;对于任何不工作的CCNode子类strange,当您不想处理它时,是否只想添加标志并忽略触摸?对触摸的响应意味着调用函数cctouch。是的,我有菜单和卷轴。。但我不必在cctouch功能中看到他们对触摸的响应。。(??)它们是一体的。见上文。
-(void) setIsTouchEnabled:(BOOL)enabled
{
    if( isTouchEnabled_ != enabled ) {
        isTouchEnabled_ = enabled;
        if( isRunning_ ) {
            if( enabled )
                [self registerWithTouchDispatcher];
            else {
                CCDirector *director = [CCDirector sharedDirector];
                [[director touchDispatcher] removeDelegate:self];
            }
        }
    }
}

-(void) registerWithTouchDispatcher
{
    CCDirector *director = [CCDirector sharedDirector];
    [[director touchDispatcher] addStandardDelegate:self priority:0];
}