2012-11-16 81 views
0

喜同胞的cocos2d遊戲開發者,我有一個簡單的問題CCLayer UIGestureRecognizer和HUD

我採取的是上有兩個CCLayers一個CCScene,一個是遊戲,另一種是HUD實現爲這樣:

+ (CCScene *)scene { 
    CCScene *scene = [CCScene node]; 
    LevelLayer *layer = [LevelLayer node]; 
    LevelHUDLayer *hud = [LevelHUDLayer node]; 
    layer = [layer init]; 

    [layer setHUDLayer:hud]; 
    [hud setParentLevel:layer]; 

    [scene addChild:hud z:HUD_ZLevel]; 
    [scene addChild:layer]; 

    return scene; 
} 

而且效果很好。我也有一個UIPinchGestureRecognizer我實現像這樣:

- (void)onEnterTransitionDidFinish { 
    pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(makePinch:)]; 
    [[CCDirector sharedDirector].view addGestureRecognizer:pinch]; 
} 

然後我趕上手勢以後的代碼如下所示:

self.scale = pinch.scale; 

這完美的作品除了我想,以確保只有遊戲層拿起手勢,而不是HUDLayer。現在觸摸HUDLayer的控件並嘗試在屏幕上移動角色導致該級別縮放,這非常煩人。

所以我的問題是如何分配只有LevelLayer拿起手勢識別器?我認爲如果可以訪問CCLayer的UIView,這很容易,但看起來好像我只能訪問CCDirector.sharedDirector.view

非常感謝!

回答

0

由於一個簡單的原因,您無法訪問CCLayer的視圖:它不存在。所有的cocos2d邏輯都是在單個openGL視圖中進行的。

要限制手勢識別器的區域,您可以實施代理方法gestureRecognizerShouldBegin:。在那裏你可以檢查觸摸的位置,如果他們在你的HUD而不是遊戲層,則返回NO

另一種方法是使用cocos2d中的CCTouchDispatcher實現您自己的手勢識別器。

+0

感謝您的輸入,我現在正在嘗試gestureRecognizerShouldBegin方式,但我想知道如何檢查子圖層是否已收到輸入。這是非常重要的,因爲HUD控件具有透明的部分,允許觸摸傳播 – Parad0x13