CCNode + SFGestureRecognizer正在使用ccTouch *?

时间:2014-04-09 23:42:19

标签: cocos2d-iphone uigesturerecognizer

我在某些cocos2d节点上使用 CCNode + SFGestureRecognizer https://github.com/krzysztofzablocki/CCNode-SFGestureRecognizers进行一些平移手势,但我还有其他节点只使用正常 ccTouchBegan / Moved /结束并使用 CCTouchOneByOneDelegate

但是我遇到了冲突。由于ccTouch重叠,我只需设置swallowsTouches:NO。因为基本上我正在做的是根据触摸方向确定在ccTouchesMoved中使用哪种触摸(主要是水平或大部分垂直),如果方向与特定节点允许的方向相匹配,该节点通过取消所有其他目标处理程序来声明触摸

但是当一些节点使用手势识别器时,当方向不在该节点的允许方向时,我似乎不容易告诉触摸取消。在我确定其他触摸是否应声明触摸之前,gestureRecognizerShouldBegin来电已被调用。我只是不知道取消手势触摸的正确方法。

有什么好的,干净的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

因此,CCNode + SFGestureRecognizers.m中的gestureRecognizerShouldBegin没有正确的翻译/速度信息,但是我自己在委托中做了。委托中的shouldReceiveTouch方法也没有此信息。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        UIPanGestureRecognizer *pan = (UIPanGestureRecognizer*)gestureRecognizer;

        CGPoint translation = [pan translationInView:pan.view];
        CGPoint velocity = [pan velocityInView:pan.view];

        CGPoint dragVector = /* detect direction of the translation/velocity */

        // if it was a horizontal drag return YES, otherwise NO
        if (dragVector.x != 0 && dragVector.y == 0) {
            return YES;
        }
        return NO;
    }
    return YES;
}