CCLayer UIGestureRecognizer和HUD

时间:2012-11-16 02:22:01

标签: cocos2d-iphone zoom hud

嗨同胞cocos2d游戏开发者,我有一个简单的问题

我正在实施一个CCScene,它上面有两个CCLayer,一个是游戏,另一个是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

提前致谢!

1 个答案:

答案 0 :(得分:0)

由于一个简单的原因,您无法访问CCLayer的视图:它不存在。所有cocos2d逻辑都在单个openGL视图中进行。

要限制手势识别器的区域,您可以实现委托方法gestureRecognizerShouldBegin:。在那里你可以检查触摸的位置,如果它们在你的HUD上而不是游戏层,则返回NO

另一种方法是使用cocos2d中的CCTouchDispatcher实现自己的手势识别器。