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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top