1

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

[[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

稍后如果我想禁用触摸: self.isTouchEnabled=NO;它不起作用。如果我试图禁用它:

[[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:NO];

没关系,但是如果我用相同的语法再次启用它,我会崩溃,代表已经添加了......

如何动态禁用和启用触摸?

谢谢 。

4

2 回答 2

0

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

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

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

如您所见,基本的 CCLayer 代码已经实现了您尝试手动执行的操作。只需使用该属性。

于 2013-02-28T14:37:39.940 回答
0

cc 触摸调度程序和 self.istouchenabled 是检测触摸的两种不同方法。我现在不在电脑前,我不记得确切的代码。我即将登上国际航班,因此如果您愿意等待一天左右,我将使用正确的方法更新此内容以删除 cctouch 调度程序。如果您不想等待,我建议您查看 cocos2d 文档。我敢肯定它会告诉你

于 2013-02-28T15:11:57.203 回答