|
|
|
||
|
|
|||
| Praktyczna Teoria część 5 | |||
|
autor: Fanotherpg
Pierwsze porządne silniki
W ostatnich dwu numerach prezentowałem wam teorię, na temat tego jakie silniki można wykonać przy pomocy techniki pseudo 3D. Jednak były to dziecinne igraszki i tak naprawdę dopiero teraz omówię jak wykonać lepsze silniki. Jednak nie podam wszystkiego krok po kroku, jak ostatnio bo stwierdziłem, że skoro jesteście głodni to nie dam wam ryby, tylko wędkę i nauczę was łowić. I dlatego też, ten odcinek będzie nawiązywać do poprzedniego i zamiast 2 sposobów na stworzenie drogi zaprezentuje wam od razu wszystkie 3, oraz jak wspominałem coś dla lotników...
Nieco lepsze wyścigi wersja 1.
Ostatnio prezentowałem wam kurs na stworzenie prostych wyścigów w pseudo 3D, dzisiaj powiem wam jak je ulepszyć i rozbudować. Do takich w rodzaju SNES'owych bądź komórkowych.
Otwórzcie swój projekt sprzed tygodnia i zamieńcie cały obiekt tła którym jest ulica na obiekt aktywny, i podzielcie go na tak 50-200 obiektów. Wysokości od 1px (200) do 4px (50) i szerokości tego starego i ustawcie wszystkim obiekty hot spoty na sam środek. Teraz obiektowi który jest na samym szczycie ustawcie w kodzie ruch aby co 5 s jego wartość B losowała się z pośród 23 liczb + 2, i zróbcie przedziały że jeśli wartość B większa od 2 a mniejsza bądź równa 12 to co 0.5 sekundy pozycja X drogi - 1 a wartość B -1, a jeśli wartość B większa od 14 a mniejsza lub równa 24 to co 0.5 sekundy pozycja X drogi + 1 wartość B - 1. Dodajcie też kiedy wartość B równa się 1 ustaw ją na 0 i kiedy 13 też ustaw na 0. Dzięki temu 1 część drogi będzie się poruszać. Teraz tylko dodajcie warunki, że jeśli pozycja X kolejnych obiektów jest różna o więcej niż 1 px (pozycja jest liczona od hot spotów) to zależnie od tego czy jest to różnica na plus czy minus dodaj lub odejmij pozycję X kolejnego obiektu ulicy, i tak wielokrotnie powtórzyć i mamy ruch ulic... Zamiast zmian pozycji X można dać ruch piłki w lewo/prawo...
Jeszcze tylko w AI wroga dajcie aby ustawiał się w odpowiedniej odległości od krawędzi konkretnego kawałka ulicy, bo to trochę będzie, jak ulica będzie po lewej, a on dalej będzie się tworzył na samym środku ekranu. I dodajmy, detektor na środku gracza i jeśli detektor nie koliduje z ulicą to koniec gry.
Nieco lepsze wyścigi wersja 2.
Pamiętacie jak mówiłem że krawędź ulicy schodzi 1 px w dół i 1 px w bok? Teraz wykorzystamy tą zależność.
Wytnijmy tylko 1 linijkę z tła ulicy - tą reprezentującą sam szczyt ulicy i stwórzmy ją jako obiekt aktywny. Ustawy hot spot'a idealnie na środek i każmy tworzyć co 1 dziesiątą sekundy obiekt na lewej krawędzi ulicy i zawsze niech schodzi o 1 px w dół i 1 px w lewo od swojej aktualnej pozycji a drugi obiekt niech się tworzy w takim samym czasie po prawej krawędzi ulicy i schodzi 1 px w dół i 1 px w prawo. Dodajmy jeszcze aby po opuszczeniu planszy obiekt był niszczony. I dajmy górnej części ulicy jeden z ruchów z wersji 1. Teraz mamy jako krańce ulicy obiekty aktywne, więc możemy dać, że jeśli gracz dotyka krańca ulicy koniec gry.
Tutaj również trzeba pamiętać aby auta tworzyły się w odpowiednim miejscu (zależne od hot spota górnego krańca ulicy) i przemieszczały się zgodnie z pobocznymi obiektami ulicy, czyli jeśli koliduje z lewym krańcem + 1 w pozycji X jeśli z prawym - 1 w pozycji X. Dzięki temu, zawsze boczne będą koło krawędzi a nie na niej, a z środkowym sami się pobawcie, przecież macie już wędkę...
Nieco bardziej profesjonalne wyścigi wersja 3.
To co teraz przeczytacie, może wielu z was przerazić, ale jest wstępem do prawdziwego pseudo 3D. Zabawimy się z prawdziwym badaniem przestrzeni w pseudo 3D, chociaż i tak to co zaprezentuję w tym akapicie jest zaledwie podstawą. No więc zaczynajmy.
Stwórzmy na planszy obiekt tła w kształcie dużego prostokąta i odznaczmy mu opcję collision with box i ustawmy go jako obstacle. Wytnijmy w jego grafice kontury mniejszego prostokąta (3 px grubości lini) i rogi zaokrąglijcie tak do 20 px (tak aby 1 pozioma linia zaokrąglenia była gruba na 3 px tak samo jak linia konturu pozioma czy pionowa i wypełnijmy je kolorem przeźroczystym. Tak oto powstała nasza trasa.
Teraz stwórzmy detektor samochodu wielkości 1 na 1 px, i 25 różnych detektorów. W kodzie ustawmy, aby w strefie pierwszej pionowej trasy i pierwszego zakrętu były nad nim w układzie kwadratu 5x5. dzięki temu będzie odbywać się detekcja na 5 pól do przodu gracza i po 2 pola na boki od niego (1 pole ulicy na które może wkroczyć z każdej strony i 1 pole trawy czyli obiekt tła). Teraz ustawmy w kodzie odpowiednie pozycje dla pozostałych 3 wersji trasy (czyli po prawo od obiektu, poniżej i po lewo) i stwórzmy perspektywę.
Perspektywa niech też się składa z 25 obiektów i każdy z nich niech będzie miał 3 animacje (trawa, środek drogi i fragment krawędzi odpowiedni dla danego fragmentu drogi, nadal opieramy się o rysunek z poprzedniego kursu). Teraz w kodzie dajemy tylko warunki dla wszystkich detektorów, jeśli obiekt nachodzi na tło ustaw odpowiedniemu obiektowy perspektywy animację na trawę, jeśli obiekt z jednej strony nachodzi na trawę a z drugiej nie, ustaw odpowiedniemu obiektowi perspektywy animacje krawędzi drogi, jeśli obaj sąsiedzi nie nachodzą na tło, ustaw animację odpowiedniego obiektu perspektywy na drogę.
Na sam koniec musimy zdefiniować ruch samochodu. W pierwszej części trasy gracz może poruszać się tylko w strefie X, w drugiej w Y, w trzeciej znowu X, a w czwartej znowu tylko Y. Natomiast automatyczny ruch sterowany przez komputer gracza pojazdem na odwrót, w pierwszej strefie maleje Y (auto jedzie do góry) potem rośnie X, rośnie Y, maleje X. I tak dzięki temu mamy ruch auta po trasie, którą sami możemy dowolnie modyfikować byle zostały zachowane proporcje w szerokości drogi, na zakrętach bo inaczej może nie być możliwym skręcenie bez wylecenia na trasę. Jednak ta budowa silnika ma 1 wadę. Na ostatnim polu zakrętu musimy przerzucić detektor gracza do następnej strefy ponieważ inaczej przed graczem pojawi się trawa a nagle po niej prosta ulica, a nie o to nam chodzi.
Co nieco dla lotników.
A teraz, co nieco dla lotników. Pisząc ostatnią część kursu przypomniała mnie się pewna gra ze starego Atari, dzięki której wtedy uwierzyłem, że można stworzyć plansze bez ograniczeń. A dlaczego tak myślałem? Cała gra była bardzo prosta - 'kontury' kokpitu, niebieska plama jako woda i czerwono-pomarańczowa jako niebo. Początek gry to było 'niby intro' w którym startowaliśmy z lotniskowca i musieliśmy się wybić przy odpowiedniej prędkości, bo inaczej spadaliśmy w morze i był Game Over zanim zaczęliśmy grać. A cała gra polegała na zestrzeliwaniu samolotów wroga.
Stwórzmy, tak jakby grę już w locie. Dodajmy dużą planszę pionowo na jakieś 3 tys pikseli i wypełnijmy ją 2 kolorami - czerwonym do 1500 pikseli i od 1500 piksli niebieskim (może to być gradient takich rozmiarów) dajmy również na samym środku planszy niewidoczny detektor, celownik oraz 3 małe modele samolotów widzianych od boku. W kodzie dajmy zdarzenia, aby celownik zawsze był na pozycji myszki, aby zawsze ekran centrował się na detektorze. Teraz, aby było złudzenie pseudo 3D dajmy że jeżeli pozycja Y celownika jest niższa od pozycji Y detektora to odejmij od pozycji detektora 1, a jeśli większa to dodaj do pozycji Y detektora 1. A także jeśli pozycja X celownika jest mniejsza od pozycji X detektora to dodaj do pozycji X samolotów wroga 1, a jeśli pozycja X celownika jest większa od pozycji X detektora to odejmij od pozycji X samolotów wroga 1. Teraz tylko dodajmy tworzenie samolotów poza ekranem gry w strefie Y od 0 do 1500. I ruch w lewo/prawo (zależy czy wybierzecie, aby były tworzone poza lewą/prawą krawędzią bądź tak i tak), a także, że jeśli kolizja celownika z samolotem wroga i gracz kliknie to niszczymy samolot wroga.
Teraz pozostało nam tylko dodać koniec gry, jeśli wpadniemy do wody (zbyt długo wyłącznie woda jest pokazana) lub samolot przekracza swój próg wysokościowy (zbyt długo samo niebo jest pokazane) ale to już nie powinno sprawić problemu (liczenie wartości ile czasu jesteśmy w konkretnych strefach samolotem i im bliżej krańca ekranu tym szybciej się nalicza). No i to by było wszystko. I mamy oldschoolową prostą strzelankę samolotem.
|
|||
|
Copyright (c) 2005-2007 Ślimaczek |
|||