Cocos2d:手势识别器和CCMenu

时间:2013-06-19 14:20:08

标签: touch uigesturerecognizer dispatcher ccmenu

我一直关注this tutorial将UIKit与CCLayer集成。基本上我想做的就是在我的图层添加手势识别器处理程序,并根据这些操作触发我的游戏操作。

但是我确实遇到了问题(似乎new},因为我添加到图层的CCMenu项目不是吸收点击次数/点击次数。

简而言之:我确实有一个图层,我整合了Ray建议的所有代码,除了CCMenu不会吸收点击之外,它的效果非常好。

我阅读了post,但我对修改CCNode并添加验证触摸是否在空间等方面的想法感到不安。

我认为如果触摸在CCMenu区域上方,对我来说更简单的方法就是触摸CCMenu上的触摸。

这是一段代码:

- (void)handleTap:(UITapGestureRecognizer *)tapRecognizer{
    UIView * view = [[CCDirector sharedDirector] view];
    CGPoint point = [self convertYTouch:[tapRecognizer locationInView:view] ];

if (CGRectContainsPoint([pauseMenu boundingBox], point)) {
    [myMenu HowDoIPassTheTouchToTheMenu]        
}
else{
   //Handle single tap
}
}

有关如何将触控传递到菜单的任何想法吗?

我尝试使用TouchDispatcher和优先级,但无法让它工作。

编辑:我写了这个方法,但似乎没什么帮助

-(void) activateItemForTouch:(CGPoint)point
{
    if( state_ != kCCMenuStateWaiting || !visible_ || ! enabled_)
        return;

    for( CCNode *c = self.parent; c != nil; c = c.parent )
        if( c.visible == NO )
            return;

    CCLOG(@"in activate item for touch");
    selectedItem_ = [self itemForTouchLocation:point];
    [selectedItem_ selected];

    [selectedItem_ unselected];
    [selectedItem_ activate];

    state_ = kCCMenuStateWaiting;
}

-(CCMenuItem *) itemForTouchLocation: (CGPoint) touchLocation
{
    touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];

    CCMenuItem* item;
    CCARRAY_FOREACH(children_, item){
        // ignore invisible and disabled items: issue #779, #866
        if ( [item visible] && [item isEnabled] ) {

            CGPoint local = [item convertToNodeSpace:touchLocation];
            CGRect r = [item rect];
            r.origin = CGPointZero;

            if( CGRectContainsPoint( r, local ) )
                return item;
        }
    }
    return nil;
}

编辑BIS:

我还试图实现UIGestureRecognizerDelegate协议,但即使我将gestureRecognizer设置为FALSE,它也不会将手势/触摸传递给菜单。

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    CCLOG(@"should receive");
    return FALSE;
}

0 个答案:

没有答案