Pracuję nad grą wyścigową dla szkolnego projektu. Korzystanie z Visual Studio 10 pro i Irrlicht. Przepraszamy za złą gramatykę..>, I jest to moje pierwsze pytanie, więc nie jestem pewien, czy to dobrze.Jak znaleźć obiekt przed punktem nawigacyjnym lub po nim?
Chcę, aby działało, że punkty na drodze robię w różnych punktach na torze, , a następnie uruchamiam kontrolę punktów na drodze, aby sprawdzić, czy samochód minął następny punkt nawigacyjny (następny, który "potrzebuje" do przejścia)), jeśli tak, to aktualizuje następny punkt drogi, inaczej nic.
Sposób, w jaki mam nadzieję, że to zadziała, polega na tym, że robię wektor od n do n + 1, a następnie znajduję wektor prostopadły do pierwszego wektora w punkcie n. Wtedy widzę, czy obiekt znajduje się z przodu, czy z tyłu tego wektora. znalazłem Gamedev.net forumpost że pomógł mi zrobić tę funkcję:
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;
}
Aktualne błędy w to:
Aktualizuje nextwaypoint więcej niż te, bez przechodzenia obok nowego punktu.
Po dojściu do końca i zresetowaniu zatrzymuje zatrzymywanie w pierwszych punktach trasy.
Więc moje pytania:
Czy jest to dobry sposób, aby to zrobić?
Czy zrobiłem to dobrze?
Powinieneś [zaakceptować odpowiedź] (http://stackoverflow.com/faq#howtoask) lub skomentować otrzymane odpowiedzi, jeśli żadna z nich nie przekona Cię, aby uzyskać lepsze odpowiedzi. – Synxis