CCLayer UIGestureRecognizer и HUD
Привет, товарищи разработчики игры cocos2d, у меня простая проблема
Я внедряю CCScene с двумя слоями CCLay, один из которых - игра, а другой - 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 и попытка переместить персонажа на экране вызывает масштабирование уровня, это довольно раздражает.
Поэтому мой вопрос заключается в том, как мне назначить ТОЛЬКО уровень-слой, чтобы выбрать распознаватель жестов? Я думаю, что это было бы легко сделать, если бы я мог получить доступ к UIView CCLayer, но кажется, что я могу получить доступ только к CCDirector.sharedDirector.view
Спасибо заранее!
1 ответ
Вы не можете получить доступ к представлению CCLayer по одной простой причине: он не существует. Вся логика cocos2d выполнена в едином представлении openGL.
Чтобы ограничить область распознавания жестов, вы можете реализовать метод делегата gestureRecognizerShouldBegin:
, Там вы можете проверить позиции касаний и вернуться NO
если они над вашим HUD, а не игровым слоем.
Другой способ - реализовать собственный распознаватель жестов с помощью CCTouchDispatcher от cocos2d.