Sto lavorando a un gioco di corse per un progetto scolastico. Utilizzo di Visual Studio 10 pro e Irrlicht. Ci scusiamo per la grammatica cattiva>.>, Ed è la mia prima domanda, quindi non sono sicuro che sia stata eseguita correttamente.Come trovo se un oggetto è prima o dopo un waypoint?
Come voglio che funzioni è che faccio waypoint in diversi punti della traccia, e poi eseguo il controllo dei waypoint per vedere se una macchina ha superato il suo prossimo waypoint (la successiva "ha bisogno" di andare oltre), se sì, aggiorna il waypoint successivo, altrimenti niente.
Il modo in cui spero che questo funzioni è, faccio un vettore da n a n + 1, quindi trova il vettore che è perpendicolare al primo vettore su n. Poi vedo se l'oggetto è davanti o dietro quel vettore. Ho trovato un Gamedev.net forumpost che mi ha aiutato a rendere questa funzione:
void Engine::checkWaypoint(Vehicle* vehicle)
{
btVector3 vector = waypoints[vehicle->nextWaypoint];
// n
btVector3 nextVector = waypoints[vehicle->nextWaypoint + 1];
// n+1
vector = nextVector - vector;
// First vector
btVector3 pos = btVector3(vehicle->position.X,vehicle->position.Y,vehicle->position.Z);
float product = vector.dot(pos - waypoints[vehicle->nextWaypoint]);
// positiv = before, negative = behind
if(product < 0)
vehicle->nextWaypoint += 1;
}
bug correnti con questo è:
Aggiornamenti del nextwaypoint più di quelli senza andare oltre un nuovo punto.
Quando arriva alla fine e si reimposta, interrompe il trigger sui primi waypoint.
Così le mie domande:
questo è un buon modo per fare questo?
Ho fatto bene?
Si dovrebbe [accettare una risposta] (http://stackoverflow.com/faq#howtoask), o commentare le risposte fornite se nessuno ti sta convincendo, al fine di ottenere risposte migliori. – Synxis