ズーム状態でタッチアクションがスプライトで触れるかどうかを検出するにはどうすればよいですか?
-
02-10-2019 - |
質問
最初に、スプライトを含む層を大きくスケーリングしました。今、私はスプライトに触れることを感じる必要があります。私は次のように試しましたが、ゴールに到達することはできません -
CGRect tRect= [[aSprite displayedFrame] rect];
if(CGRectContainsPoint(tRect, touchedPosition))
{
NSLog(@"touched:>> touch at (%f,%f)",touchedPosition.x,touchedPosition.y);
// Do something, maybe return kEventHandled;
}
else{
NSLog(@"NOT touched: touch at (%f,%f)",touchedPosition.x,touchedPosition.y);
}
FYI:CoCOS2Dフレームワークを使用しました
解決 3
ついに私は解決策を見つけました:)、これがコードです
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedLocation = [[CCDirector sharedDirector] convertToGL:location];
CGPoint tapPosition = [self convertToNodeSpace:convertedLocation];
ここで、「自己」は、私が以前に指定したように、スプライトホルダー層です。このレイヤーはタッチイベントを聞いています。
他のヒント
まず、から場所を取得することを確認する必要があります UITouch
正しく。
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
第二に、スプライトの境界ボックスに対してタッチをテストする必要があります。
if (CGRectContainsPoint([sprite boundingBox], location)) {
// The sprite is being touched.
}
フランク・ミッチェルは正しいです。別のアプローチは、ココスがあなたのために仕事をするように、スプライト自体にリスニングコードを追加することです。実際に触れた場合にのみ、Sprite Cctouchesbeganイベントを送信します。
所属していません StackOverflow