1

タッチ イベントを処理するCCLayerサブクラスがあります。MyLayer

(BOOL) ccTouchBegan:(UITouch *) touch withEvent:(UIEvent *) event

MyLayerインスタンスのコンテンツ サイズを次のように設定します。

`myLayer.contentSize = CGSizeMake(30.0, 30.0);`

MyLayer次に、インスタンスを の子として追加しますParentLayer。何らかの理由で、画面のどこでもMyLayerタップでき、インスタンスがタップを検出します。表示部分/コンテンツ サイズのタップのみを検出したい。これどうやってするの?

MyLayerインスタンスは何らかの形で「タップ可能領域」を別の場所から継承していますか? contentSizeタップしたインスタンスの が期待どおりであることを確認しました(30, 30)。おそらく contentSize は、CCLayerサブクラスのタップ可能領域を指定する方法ではありません。

4

1 に答える 1

4

タッチが特定のCCLayerで有効になっている場合、ウィンドウ内のすべてのタッチイベントを受信します。そうは言っても、複数のレイヤーがある場合、すべてのレイヤーが同じタッチを受け取ります。

これを軽減するには、UITouchから場所を取得し、それをCocos2d座標に変換してから、関係するレイヤーの境界内にあるかどうかを確認します。

使用するコードは次のとおりです。

CCLayer * ccl = [[CCLayer alloc] init];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
if (CGRectContainsPoint(CGRectMake(ccl.position.x - ccl.contentSize.width/2, ccl.position.y - ccl.contentSize.height/2, ccl.contentSize.width, ccl.contentSize.height), location)) {
   //continue from there...
}
于 2012-04-15T02:47:18.413 に答える