レイヤーは、タッチを取得する唯一の 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 ライブラリには、Apple 標準ではなく、「ccTouchesEnded」実装があることに注意してください。イベントを処理したかどうかを示す BOOL を返すことができます。
幸運を!