NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[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 :D 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/
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group