In un gioco iOS che utilizza il kit Sprite insieme al rilevamento dei contatti nel motore fisico di Sprite Kit, diminuisco di un numero le vite dell'eroe ogni volta che entra in contatto con un nemico. Questo viene fatto dal metodo didBeginContact
. Tuttavia, sembra che quel metodo non venga chiamato solo una volta, quando il contatto inizia, ma chiamato continuamente finché l'Eroe e il nemico si sovrappongono: quando imposto un breakpoint in quel metodo, posso vedere che è l'esatto istanze del corpo fisico stesso esistenti come contact.bodyA
e contact.bodyB
. Il risultato è che l'Eroe perderà più vite, anche se passa solo un singolo nemico.Perché beginContact viene chiamato più volte?
Se l'Eroe incontra lo stesso nemico più tardi, dovrebbe ottenere un altro sottotitolo dal vivo, e quindi non posso semplicemente mantenere un hash seenEnemies
impostato per affrontare il problema sopra.
La domanda è ora: come faresti a garantire che solo un live sia sottratto per ogni contatto Eroe/nemico?
Vorrei assumere c'è una 'didEndContact' pure. – dandan78
Le domande di aiuto per il debug ("perché non funziona questo codice?") Devono includere il comportamento desiderato, un problema specifico o un errore e il codice più breve necessario per riprodurlo nella domanda stessa. Le domande senza una chiara affermazione di problemi non sono utili agli altri lettori. – LearnCocos2D
La documentazione di riferimento afferma che il metodo viene chiamato solo quando inizia il contatto. L'ho letto come "una sola volta per contatto". Apparentemente, non è questo il caso. La documentazione di riferimento è veramente sbagliata a questo punto? – someName