デフォルトでは、CCLayer は標準のタッチ デリゲートとして登録されています。対象のデリゲートとして登録する必要があります。この場合、CCLayer はタッチを要求でき、他のタッチ可能な要素はそれを受け取りません。CCLayerメソッドをオーバーライドすることでそれを行うことができます
-(void) registerWithTouchDispatcher
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: self.priority swallowsTouches:YES];
}
この後、デリゲートメソッドをこれらのものに置き換える必要があります
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@optional
// touch updates:
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
あなたのccTouchBegan:withEvent:
方法はこのようにする必要があります
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
BOOL shouldClaimTouch = NO;
BOOL layerContainsPoint = // check if current layer contains UITouch position
if( layerContainsPoint )
{
shouldClaimTouch = YES;
}
// do anything you want
return shouldClaimTouch;
}
タッチの UI 座標を GL に変換することを忘れないでください。このメソッドが YES を返した場合、このタッチは他のレイヤーによって受信されません。