Attualmente sto sviluppando un gioco per Android, e mi piacerebbe la tua esperienza su un problema che ho avuto.Sviluppo giochi Android: rilevamento collisione non riuscito
Priorità:
mio gioco incorpora cornice tasso di movimento indipendente, che tiene conto del valore tempo delta prima di eseguire necessaria Velocity calcoli.
Il gioco è un tradizionale platform 2D.
il problema:
Ecco il mio problema (semplificato). Facciamo finta che il mio personaggio sia un quadrato in piedi su una piattaforma (con "gravità" che è una velocità costante verso il basso di carattereVelocityDown).
Ho definito il rilevamento collisione come segue (supponendo punti dell'asse Y verso il basso):
Dato characterFootY è la coordinata y della base del mio carattere quadrato, platformSurfaceY è y superiore -coordinate di mia piattaforma, e platformBaseY è inferiore coordinata y della mia piattaforma:
if (characterFootY + characterVelocityDown > platformSurfaceY && characterFootY + characterDy < platformBaseY) {
//Collision Is True
characterFootY = platformSurfaceY;
characterVelocityDown = 0;
} else{
characterVelocityDown = deltaTime * 6;
Questo approccio funziona p perfettamente corretto quando il gioco funziona a velocità regolare; tuttavia, se il gioco rallenta, il tempo delta (che è il tempo trascorso tra il fotogramma precedente e il frame corrente) diventa grande, e characterFootY + characterVelocityDown superano i confini che definiscono il rilevamento delle collisioni e il personaggio cade proprio dritto attraverso (come se teletrasportarsi).
Come dovrei affrontare questo problema per impedirlo?
Grazie in anticipo per il vostro aiuto e non vedo l'ora di imparare da voi!
Se qualcun altro sta avendo questo problema, una possibile soluzione a questo è di limitare il valore deltaTime in modo che quando si trova su un certo valore, basta impostarlo uguale al cap. Ciò renderebbe la velocità di gioco incoerente, ma dovrebbe essere ok nella maggior parte dei casi. – SeveN
Hai entrambi i valori delta prima e dopo, dato che il confronto potrebbe essere fatto lì? – cjk