Kot w JavaScript #6 || Flip 'n' Shift
Cześć, witajcie!
Przejdźmy do tekstu, bo trochę się działo.
Pochowałem żywcem
Najpierw odratowałem, potem pochowałem. Inaczej mówiąc: zrezygnowałem z projektu Gridlock na rzecz nowego. Dla tych, co nie wiedzą: z założenia była to gra kanapowa, w której dwóch graczy strzelało do siebie. I tyle. Plany rozwoju były takie, by pododawać nowe postacie, które wybierałoby się jak w bijatykach, a różniłyby się może szybkością, pociskami i strzelaniem. Czyli Ctrl + C, Ctrl + V i jakieś niewielkie zmiany w parametrach. Dlaczego zrezygnowałem? Brak frajdy z tworzenia.
Flip 'n' Shift
Nowa gra, Flip 'n' Shift (inaczej „Flip and Shift”), miała być... tak, generyczną platformówką w stylu Thomas Was Alone (który spodobał mi się za jego prostotę, czystość i przede wszystkim szybkość wykonania) oraz z czymś dla mnie fajnym: zmienną grawitacją.
Dzięki temu, że w Gridlocku szybko nauczyłem się obsługi gamepada, zaimplementowałem ten system także tutaj. Czyli sterujemy WSAD-em oraz „krzyżakiem”. Dla platformówki klasyką jest skakanie i chodzenie, a zmianę grawitacji łatwo sobie wyobrazić, więc nie będę jej na razie opisywał.
Zaczęło się od ustawienia kolizji gracza z terenem. Potem, by w przyszłości nie przeklikiwać się przez zakładki w ct.js, ustawiłem klawisze, z których będę korzystać. Tak dodałem chodzenie i skok. Zmiana grawitacji była prosta do wykonania – jest to pomnożenie jej samej przez -1, co wygląda następująco: this.gravity *= -1. Dzięki temu, używając Shifta, odwracasz grawitację (stąd też tytuł).
Potem nastąpiły dwa problemy.
Lecę w dół
Gdy gracz stoi na terenie, jest przez niego hamowany, ale szybkość stworzona przez grawitację się kulminuje. Kiedy gracz spada z krawędzi terenu w przepaść (spada, nie skacze!), a chwilę temu stał na nim, to zamiast przyspieszać, jego prędkość spadania od razu przekracza szybkość ponaddźwiękową. Mógłbym zrobić tak, że jeśli gracz dotyka terenu, to grawitacja znika, a pojawia się, kiedy terenu nie dotyka. Ale co, kiedy dotkniesz sufitu? Albo gorzej: zmienisz grawitację i sufit to jednak dół? Sprawa się komplikowała, a ja przez cały dzień szukałem rozwiązania. Po tym, jak cofnąłem się do poprzedniej wersji (bo zacząłem używać GitHuba – przydatne narzędzie), gdzie nie majstrowałem przy if-ach z grawitacją, zająłem się czymś innym. Dopiero następnego dnia po prostu ograniczyłem wartość this.vspeed (prędkość pionowa) do 210 (nie jest to stała wartość, która byłaby ciągnącą w dół siłą, a nie grawitacją! Jest to jedynie ograniczenie jej siły).
Skakanie nie jest proste
Człowiek potrafi skakać. Żaba potrafi skakać lepiej. Ale żaden nie skacze do góry nogami. Gracz w mojej grze – owszem. Ale... początkowo nie działało to tak, jakbym chciał. Kiedy skaczesz w górę, wartość this.vspeed to -75. Aby skoczyć, musisz stykać się z terenem od góry. Ale wtedy nie masz jak skakać, kiedy grawitacja jest odwrócona. Dlatego sprawdzam również, czy dotykam terenu od dołu – wtedy wartość this.vspeed to 75.
Jak to tutaj napisałem, wydaje się to banalne, a siedziałem przy tym półtorej godziny. :/
Kolce i leveldesign
Zastanawiałem się, co z grafiką kolców. A w sumie - czemu nie rąb? No bo jeśli odcięta połowa rąbu, która staje się trójkątem, może być i kolcem.
Gorzej z tym, że planowałem 20 poziomów. Wyszło ok. 5. Dlaczego? Wolałem się zająć programowaniem, nie zaś tworzeniem poziomów. No i w leveldesign jestem kiepski. Aby przejść poziom, musisz zebrać "klucz" (który jest powiększającą się i zmniejszającą za pomocą sinusa kropką) i przejść przez drzwi.
Jeśli chcecie zagrać, link na itch.io tutaj. Aha - poza tym dodałem ekran startowy i fajne przejście do gry.
P. S.
Dla młodych: udanego początku roku szkolnego!