Cocos2d v3 CCButton与UIGestureRecognizers冲突

时间:2014-05-09 22:53:36

标签: objective-c button cocos2d-iphone uigesturerecognizer

我已经在一个来自NSObject的类中添加了一个UIGestureRecognizer,我正在使用UIGestureRecognizers来处理手势,但是我需要添加一个上层并在其上添加一些CCButton,所以要概念化我的层次结构将是几乎就是这样:

- CCScene
-- CCNode added to the scene (with the gesture recognizers)
-- another CCNode added with a few CCButton

UIGestureRecognizers运行良好,但CCButton从未被调用,因为触摸是由手势处理的,如果我删除手势,则称为CCButton

它们存在冲突,我不知道为什么,我已经读过CCNodes触摸从第一个开始(在层次结构中,第一个是我认为的更大的z顺序)直到最后一个,因为我的CCNode都被添加到场景中,并且因为第二个ccnode(添加了更大的z顺序)是第一个我认为它应该在另一个的UIGestureRecognizer之前触摸...

我缺少什么?

这是我添加手势的方式:

UITapGestureRecognizer *myGesture = [[UITapGestureRecognizer alloc] initWithTarget:self.myClassImplementation action:@selector(gesture:)];

[tapGesture setDelegate:self.myClassImplementation];

[[[CCDirector sharedDirector] view] addGestureRecognizer:myGesture];

我试着简单地将CCButton直接添加到CCScene但没有被调用,有人可以向我解释他们为什么会发生冲突吗?所以找到我的工作方式

1 个答案:

答案 0 :(得分:0)

手势识别器获取所有标准响应者触摸事件。所以你应该在gesturerecognizer的委托方法或手势动作中处理它。

以下是如何在委托方法中执行此操作:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    CGPoint touchLocation = [[CCDirector sharedDirector] convertToGL: [touch locationInView:touch.view]];
    CCResponderManager *responder = [[CCDirector sharedDirector] responderManager];
    CCNode *node = [responder nodeAtPoint:touchLocation];

    if([node isKindOfClass:[CCButton class]])
    {
        NSLog(@"button");
        return NO;
    }
    else
    {
        NSLog(@"not button");
        return YES;
    }
}