|
|
|
|
[TGF2/MMF2] Ruch wektorowy albo lot pojazdem w próżni. |
| Autor |
Wiadomość |
jarlfenrir
Generał brygady
 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 06-09-2008, 01:06 [TGF2/MMF2] Ruch wektorowy albo lot pojazdem w próżni.
|
|
|
http://ultrashare.de/f/5897/Asteroids.mfa.html
http://img181.imageshack....ektorowypc6.jpg
Właśnie przejrzałem przykład z głównej strony NukeSoftu prezentujący jak zrobić "lot w próżni, a nie czarnym powietrzu". I stwierdziłem, że jest trochę zbyt przestarzały.
Mój przykład możecie zamieszczać gdzie wam się podoba i robić z nim co chcecie. Ale jeśli ktos zamierza wykorzystać go w celach komercyjnych, niech się ze mną skontaktuje
Potrzebujemy obiekt aktywny - nasz pojazd z 4 zmiennymi (jeżeli ktoś uparcie chce to zrobić pod TGF 1.06 niech użyje 4 liczników). Dwie pierwsze zmienne, to wartość wektora (ja je nazywam A i B) ruchu, a w dwóch kolejnych pamiętana będzie pozycja obiekty (musi być w zmiennych, by pozycja była pamiętana z dokładnością ileś tam po przecinku ).
Tworzymy dwa zdarzenia obrotu obiektu (zamiast kierunków używamy funkcji setAngle - ja dodaję/odejmuję 4 stopnie na raz - dzięki temu uzyskuję 90 możliwych kierunków lotu). Pojazd musi dać się obracać w lewo i prawo.
Kolejne zdarzenie to zadziałanie na pojazd pewnym wektorem ruchu. dla wektora długości jeden współrzędne to będzie cosinus kąta, w jakim zwrócony jest pojazd i minus sinus tego kąta.
Wektor nowej siły musimy dodać do starego wektora (zapamiętanego w wartościach A i B).
Można także zmieniać samą długość wektora bez wpływania na kierunek lotu mnożąc współrzędne o tą samą wartość. Jeśli wartość będzie z zakresu [0,1) spowoduje to zmniejszenie prędkości pojazdu - aktualny kąt nachylenia nie będzie wpływał na ruch.
Ostatnie zdarzenie to przemieszczenie pojazdu o wektor poprzez dodanie jego współrzędnych do współrzędnych pojazdu. Dla maksymalnej dokładności ruchu zalecam podzielić wartość wektora tak, by dodawana wartość (dla obu współrzędnych) nie przekraczała 1. Jeśli boisz się, że po tym zabiegu pojazd będzie leciał zbyt wolno - użyj pętli, by go przyśpieszyć (jeżeli dodawane wartości będą większe od 1 pojazd w rzeczywistości będzie się poruszał po linii przypominającej schody)
Jeśli sądzisz, że niezrozumiale to opisałem, ściągnij przykład lub przejrzyj dołączony obrazek.
Jedna uwaga o prędkości obiektu: jeśli istotne jest, z jaką prędkością twój obiekt się porusza, możesz to obliczyć ze wzoru sqr(A*A+B*B) - ale to chyba wszyscy wiedzą
By ograniczyć prędkość ruchu, może sprawdzic się zdarzenie typu:
Kod: | Sqr(A( "Player" )*A( "Player" )+B( "Player" )*B( "Player" ))
Greater
30
-->
Set A to A( "Player" )*0.9
Set B to B( "Player" )*0.9 |
A gdzie taki ruch zastosować? Oczywiście w grze typu "Asteroids". |
|
|
|
 |
Don_Sotto
Bohater
 
Pomógł: 7 razy Posty: 221
2783 Prestiż
|
Wysłany: 22-09-2008, 10:57
|
|
|
W zasadzie typowe "hamowanie" w grze można by nawet zastosować, ale pod warunkiem, że podczas "hamowania" zaczęłyby pracować jakieś silniki z przodu statku |
_________________ A ty - czy lubisz grać w słabe gry? Nie czyń drugiemu, co Tobie nie miłe. / www.donsotto.pl / |
|
|
|
 |
jarlfenrir
Generał brygady
 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 22-09-2008, 18:50
|
|
|
| Don_Sotto napisał/a: | W zasadzie typowe hamowanie w grze można by nawet zastosować, ale pod warunkiem, że podczas hamowania zaczęłyby pracować jakieś silniki z przodu statku |
Nie. Silniki musiałyby być ustawione dokładnie przeciwnie do kierunku lotu (znaczy kiedy obracam statkiem, silnik nie mógłby się obracać razem z nim). |
|
|
|
 |
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|