Robimy grę platformową w Ruby Gosu!

Tematy różne, różniste.
Awatar użytkownika
Ekhart

Golden Forki 2015 - Zapowiedzi (zwycięstwo); Golden Forki 2011 - Dema (miejsce 1)
Posty: 447
Rejestracja: 28 maja 2010, 10:12
Lokalizacja: Midleton

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Ekhart »

Rave pisze:Anyway, co powiesz jakby w następnej części zająć się obsługą autotilesów, na kształt tych z makera XP?
Niestety, ale to jest poza moimi umiejętnościami. Próbowałem zrobić coś takiego do swojego projektu (żeby fog of war wyglądał bardziej przyzwoicie), i mimo kilku prób i kilku dni kombinowania nie udało mi się osiągnąć efektu który by działał chociaż w połowie dobrze :x

Wciąż czekam na propozycje co do kolejnego poradnika :p
Temat kolejnej lekcji wybieracie wy! W komentarzu napiszcie, co byście woleli zrobić pierwsze:
1) Ekran Tytułowy
2) Muzyka i efekty dźwiękowe
3) Przedmioty na mapie
Możecie również dać swoją propozycję!
Jeśli nie dostanę takiego, to sam narzucę coś, niekoniecznie z tej listy.
No matter how tender, how exquisite… A lie will remain a lie.
Awatar użytkownika
Rave

Golden Forki 2010 - Dema (miejsce 2)
Posty: 2041
Rejestracja: 15 kwie 2009, 21:33
Lokalizacja: '; DROP TABLE 'Messages'

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Rave »

A co powiesz na edytor poziomów? I tak będziemy potrzebować takiego prędzej czy później. Najlepiej gdyby obsługiwał co najmniej 3 warstwy (tło,ta sama co gracz,przed graczem). Warstwa "przed graczem" byłaby dobre do robienia "sekretnych przejść" wyglądających jak tile które normalnie jest nie do przejścia. Gracz kolidowałby jedynie z obiektami na warstwie 2 (ta sama co gracz).

A jako bonusik zarzucę 3 klasami z mojego projektu.

Klasa Sprite. Zajmuje się obsługą animacji:
Spoiler:
Klasa Game_Object, z niej dziedziczą wszelkie obiekty (gracz, znajdźki, przeciwnicy). Zajmuje się podstawowymi rzeczami jak rysowanie animacji:
Spoiler:
Klasa Player, zajmuje się obsługą gracza. Posiada też lepszą moim zdaniem fizykę skoku i poruszania się (stan na lekcję 2, jeszcze 3 tutka nie przerobiłem)
Spoiler:
Awatar użytkownika
Ekhart

Golden Forki 2015 - Zapowiedzi (zwycięstwo); Golden Forki 2011 - Dema (miejsce 1)
Posty: 447
Rejestracja: 28 maja 2010, 10:12
Lokalizacja: Midleton

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Ekhart »

A co powiesz na edytor poziomów? I tak będziemy potrzebować takiego prędzej czy później.
To miałem zamiar poruszyć w podstawie właśnie w następnej/kolejnej po tej lekcji. W podstawie, bo do niego na pewno wrócimy po zrobieniu jeszcze dwóch innych rzeczy. I myślę, że jeśli nie będzie obiekcji, to dzisiaj/jutro to zrobię. Na pewno to będzie długa lekcja :p
No matter how tender, how exquisite… A lie will remain a lie.
Awatar użytkownika
Hubertov
Posty: 253
Rejestracja: 28 paź 2013, 16:07

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Hubertov »

Ekhart pisze: Wciąż czekam na propozycje co do kolejnego poradnika :p
Ulepszony skok 8)

Znów mam problem: :-(
Nie wyświetla mi się Pan Gałganek, chociaż już winien się wyświetlać. Wydaję mi się, że robiłem wszystko dobrze, ale:
http://imgur.com/wXnNsyH

Kod:
Run.rb
Spoiler:
GameWindow.rb
Spoiler:
SceneMap.rb
Spoiler:
Player.rb
Spoiler:
Awatar użytkownika
Ekhart

Golden Forki 2015 - Zapowiedzi (zwycięstwo); Golden Forki 2011 - Dema (miejsce 1)
Posty: 447
Rejestracja: 28 maja 2010, 10:12
Lokalizacja: Midleton

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Ekhart »

W SceneMap nie wywołujesz metod, jedynie dałeś nazwę zmiennej:

Kod: Zaznacz cały

def update
@player
...
def draw
@player
end
Musisz dodać .update i .draw ;)

A ulepszony skok masz na końcu ostatniej części :p
No matter how tender, how exquisite… A lie will remain a lie.
Awatar użytkownika
Hubertov
Posty: 253
Rejestracja: 28 paź 2013, 16:07

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Hubertov »

Hmmmmm... znowuż wywala mi błąd.
Obrazek
Czyli że błąd leży w 7 linijce SceneMap.rb. Bez @player.update w def update, tylko samo @player.draw w def draw (cały czas mówię o SceneMap.rb) to działało.

Tutaj kod z SceneMap:
Spoiler:
Reszty kodów nie zmieniałem.
Awatar użytkownika
Ekhart

Golden Forki 2015 - Zapowiedzi (zwycięstwo); Golden Forki 2011 - Dema (miejsce 1)
Posty: 447
Rejestracja: 28 maja 2010, 10:12
Lokalizacja: Midleton

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Ekhart »

@spirte
Serio, zanim będziesz postował z błędami sprawdź uważnie, czy masz wszystko dobrze napisane. Undefined Method/Variable często właśnie oznacza, że coś źle napisałeś.
No matter how tender, how exquisite… A lie will remain a lie.
Awatar użytkownika
Hubertov
Posty: 253
Rejestracja: 28 paź 2013, 16:07

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Hubertov »

Ekhart pisze:
@spirte
Serio, zanim będziesz postował z błędami sprawdź uważnie, czy masz wszystko dobrze napisane. Undefined Method/Variable często właśnie oznacza, że coś źle napisałeś.
Dziękuje :wink: Szukałem, ale nie mogłem znaleźć
Awatar użytkownika
Dragon Kamillo

Golden Forki 2016 - Pełne Wersje (miejsce 3); Golden Forki 2013 - Zapowiedzi (zwycięstwo); Liga Mapperów Sezon IV (miejsce 2)
Posty: 1948
Rejestracja: 18 paź 2009, 21:23
Lokalizacja: Poznań/Granowiec

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Dragon Kamillo »

Widzę, że rodzi tu się fajny tutorial, dzięki któremu będę mógł (choćby dla czystej zabawy) przenieść na ekran gierki które narysowałem w zaszycie mając około 5-7 lat XD.

Miałbym parę pytań, ale to może jak ukarze się więcej lekcji.
No może po za jednym - kto jest autorem grafik użytych w tutku?

Teraz co do propozycji rave o autotilesach - to tak naprawdę ich nie potrzeba XD, zawsze można pociąć zwykłe tile tak aby składać je na wzór autotilesów - coś jak autotiles w rm 95, może i nawet rm 95 jest rozwiązaniem - Ekhart zobacz sobie jaki tam sprytny i prosty sposób wykorzystano - takie coś myślę, że dasz radę napisać - jedyny minus trochę więcej to waży, ale w sumie cięcie autotilesa na zwykłe tile jest takie samo - a t tylko przyśpieszy rysowanie w tym przyszłym edytorze.

A i co do edytora - to nie lepiej zrobić wcześniej przesuwania mapy, a potem edytor?

No i tak panoramka była by fajna (oczywiście najlepiej z systemem przesuwania jak w 2k3 - pewno trudne i nie umiesz, szkoda, ale jakbyś umiał to fajnie), dwie warstwy tak jak opisał rave też w sumie starczą (ta druga przyda też się nie tylko w sekretnych przejściach), ale fajna tez by była 4 warstwa z przesuwaniem jak panorama, ale na samym wierzchu - coś takiego jak we wspomnianym już Kapitanie Pazurze. No i na niej też by można było zrobić ze foga.
Awatar użytkownika
Hubertov
Posty: 253
Rejestracja: 28 paź 2013, 16:07

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Hubertov »

Dragon Kamillo pisze: No może po za jednym - kto jest autorem grafik użytych w tutku?
Grafiki są autorstwa Marca Russella.
Awatar użytkownika
Ekhart

Golden Forki 2015 - Zapowiedzi (zwycięstwo); Golden Forki 2011 - Dema (miejsce 1)
Posty: 447
Rejestracja: 28 maja 2010, 10:12
Lokalizacja: Midleton

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Ekhart »

Dragon Kamillo pisze:Widzę, że rodzi tu się fajny tutorial, dzięki któremu będę mógł (choćby dla czystej zabawy) przenieść na ekran gierki które narysowałem w zaszycie mając około 5-7 lat XD.

Miałbym parę pytań, ale to może jak ukarze się więcej lekcji.
No może po za jednym - kto jest autorem grafik użytych w tutku?

Teraz co do propozycji rave o autotilesach - to tak naprawdę ich nie potrzeba XD, zawsze można pociąć zwykłe tile tak aby składać je na wzór autotilesów - coś jak autotiles w rm 95, może i nawet rm 95 jest rozwiązaniem - Ekhart zobacz sobie jaki tam sprytny i prosty sposób wykorzystano - takie coś myślę, że dasz radę napisać - jedyny minus trochę więcej to waży, ale w sumie cięcie autotilesa na zwykłe tile jest takie samo - a t tylko przyśpieszy rysowanie w tym przyszłym edytorze.

A i co do edytora - to nie lepiej zrobić wcześniej przesuwania mapy, a potem edytor?

No i tak panoramka była by fajna (oczywiście najlepiej z systemem przesuwania jak w 2k3 - pewno trudne i nie umiesz, szkoda, ale jakbyś umiał to fajnie), dwie warstwy tak jak opisał rave też w sumie starczą (ta druga przyda też się nie tylko w sekretnych przejściach), ale fajna tez by była 4 warstwa z przesuwaniem jak panorama, ale na samym wierzchu - coś takiego jak we wspomnianym już Kapitanie Pazurze. No i na niej też by można było zrobić ze foga.

Więc po kolei...
Autorem grafik użytych w tutorialu jest Marc Russell, co jest napisane w pierwszym poście. Grafiki są wolne do użytku w każdym projekcie, pod warunkiem, że nie napiszesz, że je zrobiłeś (nie musisz podawać autora, ale nie możesz też powiedzieć "to ja zrobiłem te grafiki!").

Autotilesy raczej odpadają, jak wspomniałem wcześniej. Próbowałem z różnymi źródłami i nie podołałem. Nie wiem co prawda jak to wygląda w RM 95, ale większość systemów autotile działa na praktycznie takiej samej zasadzie. No i bez nich da się jednak żyć :p

Edytor: Tu jest właśnie takie błędne koło, bo żeby zrobić przesuwanie mapy, potrzebowałbym mapy gdzieś o rozmiarze 150% okna co najmniej (60x45 tili). Nie wiem jak Tobie, ale średnio mi się chce pisać 2700 indexów graficzek, i to na tyle ostrożnie, żeby wyglądało tak jak tego chcę ;) W edytorze zrobienie takiej opcji jest dużo łatwiejsze, więc zanim zająłbym się viewportem/kamerą gry (czyli właśnie przesuwaniem mapy) zrobiłbym podstawowy edytor.

Panorama: nie wiem jak wygląda przesuwanie w rm2k3, ale ja planuję zrobić to na takiej zasadzie, że mamy 4 "warstwy":
- Stała warstwa tła
- Tył planszy, który porusza się z 1/2 szybkości
- Plansza poruszająca się z normalną szybkością
- Front poruszający się 2 razy szybciej.

Jak to wygląda (poza warstwą frontową) możecie zobaczyć tutaj. Z tym, że wszystkie warstwy (poza trzecią, planszą) to obrazki.
No matter how tender, how exquisite… A lie will remain a lie.
Awatar użytkownika
Rave

Golden Forki 2010 - Dema (miejsce 2)
Posty: 2041
Rejestracja: 15 kwie 2009, 21:33
Lokalizacja: '; DROP TABLE 'Messages'

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Rave »

Dragon Kamillo pisze:dwie warstwy tak jak opisał rave
Nie, mówiłem o 3 warstwach.
1 - rysuje się za graczem. Dobre do rzeczy typu krzaczki, budynki w tle (bliskim, nie aż tak daleko jak w wypadku panoramy)
2 - warstwa ta sama jak gracz. Dlaczego nie złączyć z tłem i ustawić opcji że tile zatrzymuje gracza? Ano dlatego, że załóżmy masz taki obrazek:

Obrazek
(grafiki moje, robione w graphics gale)

Górna część "trawy" zajmuje tak naprawdę dolną część tilesa (otwórzcie w Gimpie i ustawcie sobie siatkę 32x32 jak nie wierzycie). Jeśli warstwa tła = warstwa taka jak gracz, pniak (na którym gracz może stać) by zajmował ten sam tile co trawa i nastąpiła by jedna z 2 rzeczy:
- trawa by się nagle urwała i pod pniakiem nic by nie było co by nieładnie wyglądało
- musiałbyś dla każdego typu terenu na którym pniak może się znaleźć robić osobną "końcówkę" i "początek" co by było marnotrawstwem miejsca w tilesecie.

3 - warstwa "przed" graczem. Tak jak mówiłem warstwa dla sekretów czy obiektów znajdujących się przed graczem.

//edit: I moim zdaniem wszystkie 3 warstwy powinny się poruszać z tą samą szybkością (żeby mapa się nie rozłaziła), warstwa tła natomiast tak z 1/2 szybkości (przy czym powinna się loopować) a przed mapą można jeszcze dodać kolejny obraz poruszający się 4x szybciej dla obiektów naprawdę bliso kamery.

Po prostu mapa by się rozłaziła jeśli warstwy "tilowe" przesuwałyby się z różnymi szybkościami.

//edit #2: Jeśli kogoś to interesuje, to tutaj jest moje wersja projektu. Jeszcze nie uporałem się z 3 lekcją, bo chcę to zrobić porządnie, a nie na szybko. Więc postać się zatrzymuje na dole ekranu i nie ma mapki ;).
Porównajcie sobie też moją fizykę skoku i ruchu z fizyką zaprezentowaną przez Ekharta w powyższym archiwum. Radzę też się pobawić defaultowymi wartościami zmiennych friction i airdamp w initialize klasy PlayerOBJ (Player.rb) A teraz link: https://dl.dropboxusercontent.com/u/210 ... yjatka.rar

//edit #3: Jeszczę przekleję wersję Ekharta, mam nadzieję że się nie pogniewasz ;): https://dl.dropboxusercontent.com/u/18909657/Fuzed.rar

//edit #4: Updatnąłem rara, teraz ma jakąś tam mapkę, są dwa problemy z którym sobie nie mogę w tym poradzić, wysłałem Ekhartowi, może pomoże. Aha, teraz skacze się spacją. Link ten sam co w edicie #2.
Awatar użytkownika
Ekhart

Golden Forki 2015 - Zapowiedzi (zwycięstwo); Golden Forki 2011 - Dema (miejsce 1)
Posty: 447
Rejestracja: 28 maja 2010, 10:12
Lokalizacja: Midleton

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Ekhart »

Co do Twojego problemu, to rozwiązanie jest całkiem proste. Nie będę wklejał kodu, wierzę, że sam sobie poradzisz jak tylko wyjaśnię :p

Sprawę blokowania: tego, że postać spada za wcześnie, albo wchodzi w kawałek ściany, można rozwiązać prosto. Jest to też powód, dla którego moja klasa Player ma dwa rodzaje zmiennych: @x/@y wskazujące środkowy dół sprita, i @real_x/y, w których grafika jest rysowana. Gdy przy każdym sprawdzaniu grawitacji/blokowania do wartości x dodasz 1/2 szerokości sprita, wszystko działa (przynajmniej u mnie :P). A co do skakania przy trzymaniu obu strzałek, to nie wiem do końca w jaki sposób jest to wywoływane (u mnie tego błędu nie ma. Wymówki programistów #1243), ale najprostrzym rozwiązaniem byłoby sprawdzanie czy postać się już porusza, i jeśli tak: ignorowanie drugiego kierunku.


A co do edytora: zaczniemy z dwiema warstwami. Jeśli rzeczywiście będą niewystarczające, możemy zrobić trzecią (nie zajmie to dużo czasu). Blokowanie też będzie ciut zmienione, ale to w lekcji po najbliższej ;) dzisiaj kolejna lekcja, z edytorem. Jeszcze nie skończyłem (wczoraj z dobre 3h siedziałem!), ale już blisko końca jestem. Pozostałe warstwy (nie gry) będą działały tak jak w pseudodemku podałem.
No matter how tender, how exquisite… A lie will remain a lie.
Awatar użytkownika
Rave

Golden Forki 2010 - Dema (miejsce 2)
Posty: 2041
Rejestracja: 15 kwie 2009, 21:33
Lokalizacja: '; DROP TABLE 'Messages'

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Rave »

Aha, dzięki. W sumie w mojej klasie game_object (z której klasa Player dziedziczy) mam ustawione zmienne bottom i right wskazujące na prawą/lewą stronę sprita, mogę też dodać middle_x/middle_y ;).

Anyway, jak ci się podoba moja fizyka skoku/ruchu?

//edit: Mógłbyś mnie naprowadzić jak rozwiązać drugi problem (padaczka postaci)?
Awatar użytkownika
Ekhart

Golden Forki 2015 - Zapowiedzi (zwycięstwo); Golden Forki 2011 - Dema (miejsce 1)
Posty: 447
Rejestracja: 28 maja 2010, 10:12
Lokalizacja: Midleton

Re: Robimy grę platformową w Ruby Gosu!

Post autor: Ekhart »

Kod: Zaznacz cały

if $gamewindow.button_down?(KbLeft) and !wall?(@player.x + (@player.width/2), @player.y, :left) then
			@player.move_left
		elsif $gamewindow.button_down?(KbRight) and !wall?(@player.x + (@player.width/2), @player.y, :right) then
			@player.move_right
		end
Chyba powinno działać.
No matter how tender, how exquisite… A lie will remain a lie.
ODPOWIEDZ