|
|
|
|
[TGF/MMF] Podstawowy własny ruch ośmio-kierunkowy |
| Autor |
Wiadomość |
Cage
Plutonowy Popychacz pixeli
 
Pomógł: 3 razy Posty: 85
2553 Prestiż
|
Wysłany: 26-08-2006, 02:55 [TGF/MMF] Podstawowy własny ruch ośmio-kierunkowy
|
|
|
Artykuł o tym jak zrobić własny, lepszy engine ruchu, w tym przypadku jest to ruch ośmio-kierunkowy. Tworzenie własnych ruchów opartych na zdarzeniach jest lepsze, ponieważ mamy nad nimi całkowitą kontrolę i pozwala to uniknąć błedów (TGF-owy ruch platformowy jest tego świetnym przykładem) czy ograniczeń (po co ruch samochodowy 32 kierunkowy kiedy może być w 360 stopniach?).
Zacznijmy od stworzenia wymaganych obiektów. Stwórzmy obiekt gracza, i to narazie wystarczy. Pamiętajmy żeby nie ustawiać mu żadnych typów ruchu, musi być obiektem "statycznym"(static). Narazie tyle wystarczy. Całość polega na tym, że przy trzymaniu klawiszy ruchu(tutaj akurat strzałek) to pozycja obiektu zmienia się o określoną wartość. Teraz przejdźmy do zdarzeń. Stwórzmy takie zdarzenia:
Gracz trzyma przycisk "strzałka w góre" => Ustaw pozycje Y "bohater" na Y "Bohater" - 2
Gracz trzyma przycisk "strzałka w dół" => Ustaw pozycje Y "bohater" na Y "Bohater" + 2
Gracz trzyma przycisk "strzałka w prawo" => Ustaw pozycje X "bohater" na X "Bohater" + 2
Gracz trzyma przycisk "strzałka w lewo" => Ustaw pozycje X "bohater" na X "Bohater" - 2
Tadaam! :) Możecie już przetestować grę. No i mamy ruch ośmio kierunkowy w czterech zdarzeniach. Nie potrzeba robić specjalnych zdarzeń dla kierunków ukośnych. Jednak jak zrobić kolizje jesli movement -> stop nic nie daje? (Jeśli obiekt nie ma ustawionego ruchu ta funkcja jest nawet nie dostępna.) Bardzo prosto. Najpierw stwórzmy obiekty - przeszkody(blokujace obiekty tła) i kolizjoner(detektor). Jego kształt może być różny. Jeśli np. tworzymy izometryczna gierke rpg, to kolizjoner bedzie kwadratem o wielkości stóp bohatera. A jeśli mamy np. strzelanke z góry i chcemy żeby obiekt nie zatrzymywał się gdy zderzy bronią o ściane to będzie miał kształt postaci bez broni itd. Gdy stworzymy ten obiekt to musimy stworzyć odpowiednie zdarzenia. Kolizjoner powinien być nie widzialny, chyba że jest to wycinek grafiki gracza itd.. Zacznijmy od prostego, a ważnego zdarzenia.
Zawsze -> Ustaw pozycje "bohater" na XX i YY od "kolizjoner" (Wartości do ustawienia, ew. 0, 0 jeśli mamy odpowiednio ustawione Hot Spot'y)
Ustawiamy pozycje detektora. Może mieć taką samą pozycje jak obiekt, albo inną, wszystko zależy jakie kolizje chcemy zrobić. Teraz zróbmy zdarzenia dotyczące kolizji.
Obiekt "Kolizjoner" nachodzi na tło, Gracz trzyma przycisk "strzałka w góre" => Ustaw pozycje Y "Kolizjoner" na Y "Kolizjoner" + 2
Obiekt "Kolizjoner" nachodzi na tło, Gracz trzyma przycisk "strzałka w dół" => Ustaw pozycje Y "Kolizjoner" na Y "Kolizjoner" - 2
Obiekt "Kolizjoner" nachodzi na tło, Gracz trzyma przycisk "strzałka w prawo" => Ustaw pozycje X "Kolizjoner" na X "Kolizjoner - 2
Obiekt "Kolizjoner" nachodzi na tło, Gracz trzyma przycisk "strzałka w lewo" => Ustaw pozycje X "Kolizjoner" na X "Kolizjoner" + 2
W poprzednich zdarzeniach ruchu dodajemy też warunek że jeśli "Kolizjoner" NIE(x) nachodzi na tło. Nastąpiła tutaj drobna zmiana mechaniki, bo ruch raczej opiera się na detektorze a pozycja bohatera jest do niego dopasowywana, można też zrobić na odwrót. Przetestuj grę. Wszystko powinno chodzić. Zróbmy teraz żeby obiekt był niewidzialny i to tyle. Jednak jeśli chcemy zrobić aby obiekt poruszał sie szybciej, to pojawia się pewien problem. Problem niedokładności kolizji. Chociaz nie jest to problem przy wartościach typu 2-4, ale już 5 pikseli to już spora niedokładność przy małych obiektach które mają blokować gracza. Wyleczymy to wszystko fastloopem. :) Dodajemy zdarzenie:
Zawsze -> Fastloop: Uruchom pętle(Start loop) #0 'x' razy
X - prędkość poruszania się obiektu(piksele/petlą)
Teraz przy zdarzeniach ruchu(konkretnie zmiany pozycji) zmieniamy że wszędzie postać zmienia pozycje tylko o jeden piksel. Teraz do każdego zdarzenia ruchu dodajemy warunek 'czy pętla #0 uruchomiona'(loop trigger). Ten warunek zawsze musi się znajdować na samej górze zdarzenia bo inaczej nie zadziała. Powinno to wyglądać np. tak:
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w góre" => Ustaw pozycje Y "bohater" na Y "Bohater" - 1
+ Kolizjoner" NIE(x) nachodzi na tło
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w dół" => Ustaw pozycje Y "bohater" na Y "Bohater" + 1
+ Kolizjoner" NIE(x) nachodzi na tło
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w prawo" => Ustaw pozycje X "bohater" na X "Bohater" + 1
+ Kolizjoner" NIE(x) nachodzi na tło
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w lewo" => Ustaw pozycje X "bohater" na X "Bohater" - 1
+ Kolizjoner" NIE(x) nachodzi na tło
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w góre" => Ustaw pozycje Y "bohater" na Y "Bohater" + 1
+ Kolizjoner" nachodzi na tło
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w dół" => Ustaw pozycje Y "bohater" na Y "Bohater" - 1
+ Kolizjoner" nachodzi na tło
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w prawo" => Ustaw pozycje X "bohater" na X "Bohater" - 1
+ Kolizjoner" nachodzi na tło
Pętla #0 uruchomiona
+ Gracz trzyma przycisk "strzałka w lewo" => Ustaw pozycje X "bohater" na X "Bohater" + 1
+ Kolizjoner" nachodzi na tło
Widzicie - to nie takie trudne, a dużo lepsze od gotowego ruchu ośmio-kierunkowego i posiadamy nad nim większa kontrolę. Dzięki użyciu fastloopa unikamy niedokładności i błędów typu przelatywanie postaci przez ściany itd. Życze przyjemnego tworzenia swoich enginów - to nie jest aż tak trudne. |
_________________ Supplice - projekt retro FPS na którym obecnie pracuję:
https://store.steampowered.com/app/1693280/Supplice/ |
|
|
|
 |
dng
Sierżant
 
Pomógł: 1 raz Posty: 139
1083 Prestiż
|
Wysłany: 26-08-2006, 12:13
|
|
|
Chłopie wiesz co? Ty mi się chyba na kompa włamałeś, bo ja robię identycznie No, może troszkę inna kolejność zdarzeń. Ale poza tym, ruch bardzo dobry, choć ogólnie prosty i nadaje się dla klikowców troszkę mniej początkujących |
_________________ www.cportal.webd.pl |
|
|
|
 |
Cage
Plutonowy Popychacz pixeli
 
Pomógł: 3 razy Posty: 85
2553 Prestiż
|
Wysłany: 26-08-2006, 12:36
|
|
|
| Hehe, ten artykuł był napisany kiedy byłem redaktorem na 2giej SG więc jest już dość stary, teraz tylko pare poprawek wprowadziłem. |
_________________ Supplice - projekt retro FPS na którym obecnie pracuję:
https://store.steampowered.com/app/1693280/Supplice/ |
|
|
|
 |
|
|
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
|
|