Wie kann ich erkennen, ob eine Aktion Berührung auf einem Sprite berührt oder überhaupt nicht Zoom Zustand?
-
02-10-2019 - |
Frage
Zuerst habe ich die Schicht größer skaliert, welche die Sprites enthält. Jetzt brauche ich Berührung auf einem Sprite zu erfassen. Ich habe versucht, wie folgt, aber kippe Reichweite Ziel -
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);
}
Zur Info: Ich habe verwendet cocos2d Rahmen
Lösung 3
Endlich ich die Lösung gefunden zu haben :), hier ist der Code
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedLocation = [[CCDirector sharedDirector] convertToGL:location];
CGPoint tapPosition = [self convertToNodeSpace:convertedLocation];
Dabei steht ‚Selbst‘ ist die Sprite-Halteschicht, wie ich vorher angegeben haben. Diese Schicht wird das Berührungsereignis zu hören.
Andere Tipps
Zunächst müssen Sie sicherstellen, dass Sie den Speicherort aus dem UITouch
korrekt erhalten.
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
Zweitens müssen Sie Ihre Berührung gegen die Sprite-Begrenzungsrahmen testen.
if (CGRectContainsPoint([sprite boundingBox], location)) {
// The sprite is being touched.
}
Frank Mitchell ist richtig. Ein anderer Ansatz wäre Hörposition Code an das Sprite hinzuzufügen selbst, so dass Cocos wird die Arbeit für Sie tun. Es wird nur die Sprite ccTouchesBegan Ereignisse senden, wenn es tatsächlich berührt wird.