Слой - единственный класс cocos2d, который получает прикосновения.
Хитрость в том, что ВСЕ экземпляры Layer проходят сенсорные события один за другим, поэтому ваш код должен это обрабатывать.
Я сделал это так:
-(BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView: [touch view]];
CGPoint cLoc = [[Director sharedDirector] convertCoordinate: location];
float labelX = self.position.x - HALF_WIDTH;
float labelY = self.position.y - HALF_WIDTH;
float labelXWidth = labelX + WIDTH;
float labelYHeight = labelY + WIDTH;
if( labelX < cLoc.x &&
labelY < cLoc.y &&
labelXWidth > cLoc.x &&
labelYHeight > cLoc.y){
NSLog(@"WE ARE TOUCHED AND I AM A %@", self.labelString);
return kEventHandled;
} else {
return kEventIgnored;
}
}
Обратите внимание, что библиотека cocos2d имеет реализацию "ccTouchesEnded", а не стандарт Apple. Он позволяет вам возвращать BOOL, указывая, обрабатывали ли вы событие или нет.
Удачи!