Dane:
- pozycja obiektu (P)
- prędkość obiektu (V), inicjujemy prędkością początkową V = new Vector2(3.0, 0.0);
- pozycja startowa (xS) obiektu i pozycja x końcowa (xK) obiektu
Zmienne pomocnicze:
- czy obiekt idzie tam (bool tam = true;)
Do translate zawsze podstawiasz pozycję P:
Kopiuj
glTranslated(P.x, P.y, 0.0);
Pozycję zawsze zmieniasz o V:
V można, a nawet trzeba w poważnej aplikacji przemnożyć przez czas trwania klatki (w powyższym wzorze). Powiedzmy, że chcesz obiekt przesunąć o 3
jednostki w przestrzeni w czasie jednej sekundy. W takim razie musisz V(3.0, 0.0) * czasTrwaniaKlatki;
Żeby niepotrzebnie nie komplikować (w takim prostym przykładzie), to czas trwania klatki możesz obliczyć dzieląc 1 przez ustawiony limit klatek na sekundę (wszystko na liczbach zmiennoprzecinkowych).
Kiedy x pozycja obiektu jest większa niż pozycja końcowa xK, to obiekt już nie idzie tam (idzie z powrotem):
Kopiuj
if (P.x > xK && tam) {
tam = false;
V = new Vector2(-3.0, 0.0);
}
Poza tym, jeśli x pozycja obiektu jest mniejsza niż pozycja startowa xS, to obiekt idzie tam:
Kopiuj
else if (P.x < xK && !tam) {
tam = true;
V = new Vector2(3.0, 0.0);
}
Pisane z palca, mogą zdarzyć się bugi ;)