Come posso rilevare se un'azione di tocco tocca uno sprite o meno allo stato di zoom?
-
02-10-2019 - |
Domanda
Prima ho scalato lo strato più grande che contiene gli sprite. Ora ho bisogno di sentire tocco su uno sprite. Ho cercato come segue, ma non posso portata di obiettivo -
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: quadro cocos2d ho usato
Soluzione 3
Finalmente ho trovato la soluzione :), ecco il codice
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedLocation = [[CCDirector sharedDirector] convertToGL:location];
CGPoint tapPosition = [self convertToNodeSpace:convertedLocation];
dove 'sé' è lo strato titolare sprite come ho specificato prima. Questo strato è in ascolto l'evento di tocco.
Altri suggerimenti
In primo luogo, è necessario essere sicuri di ottenere la posizione dalla UITouch
correttamente.
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
In secondo luogo, è necessario testare il vostro tocco contro riquadro di delimitazione dello sprite.
if (CGRectContainsPoint([sprite boundingBox], location)) {
// The sprite is being touched.
}
Frank Mitchell è corretta. Un altro approccio sarebbe quello di aggiungere il codice di ascolto per lo sprite stessa in modo che Cocos farà il lavoro per voi. Sarà solo inviare gli eventi sprite ccTouchesBegan se è effettivamente toccato.