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

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[GM] Platformówka 3D
Autor Wiadomość
Jaklub 
Plutonowy


Posty: 64

4571 Prestiż
Wysłany: 25-08-2006, 16:43   [GM] Platformówka 3D

Aby móc zrobić grę opisaną w artykule, musisz posiadać zarejestrowanego Game Makera 6.1. Cena rejestracji: 60zł.

Najpierw trzeba dodać 3 sprity do naszej gry - pierwszy ma przedstawiać okrąg w rozmiarze 32*32 pikseli, drugi kwadrat w rozmiarze 128*128 pikseli, a trzeci - okrąg w rozmiarze 64*64. Origin spritów z kołami musi znajdować się w ich środku.

Jeśli już zrobiłeś powyższe sprity użytkowniku, pora zabrać się za dźwięki. Pierwszy ma być dźwiękiem skakania, najlepiej sympatycznym "boing". Drugi ma być odgłosem skończenia levelu, trzeci - zebrania monety, a czwarty - muzyczką.

Robimy backgroundy. Backgroundy w 3D obsługuje się zwykle jako tekstury. Tekstury muszą mieć rozmiary 8*8, 16*16, 32*32, 64*64, 128*128, 256*256 i 512*512 pikseli.
Pierwsza tekstura ma być czerwonym kolorem, najlepiej gradientem. Druga musi być żółtym, trzecia ma przedstawiać... marmur (chyba). Jeśli nie masz skąd wziąć tej tekstury, zajrzyj do bibliotek GM-a. W katalogu z twoim GM-em znajdziesz folder Backgrounds. W nim jest plik gray2, który należy wziąć do naszej gry, ale potem powiększyć tą teksturę z rozmiaru 100*100 na 128*128 pikseli. 4 ma być niebem, a 5 zielonym gradientem.

Kończymy z teksturami, a zaczynamy z najtrudniejszym: objektami. Robimy więc pierwszy objekt i nazywamy go kamera. W evencie Room Start musi znajdować się skrypt:
Kod:
d3d_start();
sound_loop(muzyczka);


d3d_start to komenda startująca 3D, a sound_loop to znany wam skrypt do odtwarzania dźwięków i zapętlania ich. W miejscu muzyczka powinna znajdować się nazwa dźwięku z muzyczką w waszej grze.
W evencie Room End:
Kod:
d3d_end();

Doskonale wiesz, że to skrypt skończenia 3D.
W evencie draw - skrypt:
Kod:
d3d_set_projection(bohater.x,bohater.y+256,bohater.z+256,bohater.x,bohater.y,bohater.z,0,0,1)

Powyżej jest skrypt ustalenia pozycji kamery.
W evencie draw - jeszcze jeden skrypt:
Kod:
ttt=background_get_texture(niebo)
draw_set_color(c_white)
d3d_draw_ellipsoid(-640,-640,-640,room_width+640,room_height+640,800,ttt,11,11,24)


Tu jest skrypt rysowania nieba.

Robimy nowy objekt: ziemia. Nadajemy mu sprite kwadratu.
W evencie draw - skrypt:
Kod:
ttt=background_get_texture(marmur)
draw_set_color(c_white)
d3d_draw_block(x,y,z-10,x+sprite_width,y+sprite_height,z,ttt,1,1)


Tak, to skrypt rysowania marmurowego klocka.

Tworzymy kolejny objekt: bohater. Dajemy mu sprite koła w rozmiarze 32*32. W evencie create - skrypt:
Kod:
z=0
zspeed=0


zspeed to szybkość spadania, a z chyba już nie trzeba tłumaczyć?
W evencie step - skrypt:
Kod:
zspeed+=1
if zspeed>12 then zspeed=12
z-=zspeed
if z<-128 then room_restart()


Pierwsze trzy linijki obsługują grawitację, ostatnia śmierć w przepaści.
W evencie collision with ziemia - skrypt:
Kod:
if zother.z-6
{
z=other.z
zspeed=0
if keyboard_check(vk_space)
{
sound_play(sound0)
z+=12
zspeed=-12
}
}
if zother.z-13
{
x=xprevious
y=yprevious
}
if zother.z-26
{
z+=3
zspeed=3
}


Kolizja z ziemią + skok.
W evencie keyboard right - skrypt:
Kod:
direction-=10

W evencie keyboard left - skrypt:
Kod:
direction+=10

Obydwa skrypty to obracanie się bohatera.
W evencie keyboard up - skrypt:
Kod:
speed=4

Bohater może iść do przodu.
W evencie keyboard down - skrypt:
Kod:
speed=-2

Bohater może iść do tyłu.
W eventach keyrelease up i keyrelease down - ten sam skrypt:
Kod:
speed=0

Czyli zatrzymanie się po puszczeniu strzałki w górę albo w dół.
Event draw - skrypt:
Kod:
ttt=background_get_texture(herotekstura)
draw_set_color(c_white)
d3d_transform_set_identity()
d3d_transform_add_rotation_z(direction)
d3d_transform_add_rotation_y(zspeed)
d3d_transform_add_translation(x,y,z)
d3d_draw_block(-16,-8,0,16,8,8,ttt,1,1)
d3d_transform_set_identity()


Tu się ukazuje prawdziwe oblicze bohatera... jest klockiem. Tu trzeba było użyć skryptów transformacji. Aby działały poprawnie trzeba było ustawić origin sprita z kołem w jego środku.

Tworzymy nowy objekt i nazywamy go moneta. Dajemy mu sprite koła w rozmiarze 32*32. W evencie step piszemy skrypt:
Kod:
direction+=5

Dzięki temu skryptowi, moneta będzie ciągle zmieniać variable direction.
Event draw - skrypt:
Kod:
ttt=background_get_texture(kasa)
draw_set_color(c_white)
d3d_transform_set_identity()
d3d_transform_add_rotation_z(direction)
d3d_transform_add_translation(x,y,z)
d3d_draw_ellipsoid(-8,-2,0,8,2,16,ttt,1,1,24)
d3d_transform_set_identity()


Rysujemy dzięki temu skryptowi złotą, ciągle się obracającą monetę.
Evenct collision with bohater - skrypt:
Kod:
if other.zz-16
{
sound_play(zebranie)
score+=10
instance_destroy()
}


Czyli monetę można zebrać.

Robimy ostatni już objekt - koniec. Dajemy mu sprite koła w rozmiarze 64*64.
Skrypt draw:
Kod:
ttt=background_get_texture(roomend)
draw_set_color(c_white)
d3d_draw_ellipsoid(x-32,y-32,z,x+32,y+32,z+64,ttt,1,1,24)


Czyli rysowanie dużej kuli.
Skrypt collision with bohater:
Kod:
if other.zz-32
{
sound_play(sound1)
sleep(1000)
game_end()
}


Czyli koniec levelu.

Uff. Robimy room. Jako pierwszy musimy wstawić objekt kamera. Potem można designować room. Aby zmienić wysokość ziemi, końca levelu i monety, klikamy na niego prawym klawiszem myszy trzymając control i wybieramy Creation Code. Tam wpisujemy skrypt:
z=wymyśl sobie wysokość

W Game Options trzeba kliknąć zakładkę Errors i zaznaczyć opcję "Treat uninitialized variables as 0".

To już koniec artykułu.
 
     
Seba 
Starszy sierżant
Zwolnij!


Pomógł: 3 razy
Posty: 184

1261 Prestiż
Wysłany: 29-08-2006, 00:34   

Mi gra nie działa :(
Albo ja zrobiłem coś źle, albo Jaklub się w czymś pomylił.
_________________

WIN!
Чувак сегодня, выпил много водки.
 
 
     
Jaklub 
Plutonowy


Posty: 64

4571 Prestiż
Wysłany: 29-08-2006, 19:27   

Popraw w kolizji bohatera z monetą:

Kod:
if other.zz-16
{
sound_play(zebranie)
score+=10
instance_destroy()
}

na:

Kod:
if other.z-16
{
sound_play(zebranie)
score+=10
instance_destroy()
}

Jeśli nadal nie działa, napisz, jaki wyświetla się błąd.
 
     
Seba 
Starszy sierżant
Zwolnij!


Pomógł: 3 razy
Posty: 184

1261 Prestiż
Wysłany: 05-09-2006, 15:20   

Bohater w ogóle się nie porusza :( :(
_________________

WIN!
Чувак сегодня, выпил много водки.
 
 
     
Skotar 
Plutonowy

Pomógł: 9 razy
Posty: 83

1455 Prestiż
Wysłany: 08-09-2006, 21:23   

Tu masz przykład http://www.clicksite.yoyo...&download_id=16 . Dziękuje za uwage.
 
 
     
morty 
Młodszy chorąży


Pomógł: 7 razy
Posty: 236

6521 Prestiż
Wysłany: 06-10-2006, 02:02   

Kurs fajny, ale zbyt mało wytłumaczenia jest w nim dla początkujących. Zaawansowani i bez niego sobie poradzą, więc w sumie jest on dla nikogo :)
_________________
http://gmapsapi.com - Poznaj Google Maps API
 
 
     
radex 
Plutonowy


Posty: 64

238 Prestiż
Wysłany: 06-10-2006, 16:06   Re: Platformówka 3D

Fajny kursik, sam wypróbowałem i ulepszyłem

Jaklub napisał/a:
Aby móc zrobić grę opisaną w artykule, musisz posiadać zarejestrowanego Game Makera 6.1. Cena rejestracji: 60zł.


Zarejestrowanego, albo scrackowanego, no ale fakt faktem crackowanie jest nielegalne :P

No to po co piszesz te bzdury? :P | RomanX
Ostatnio zmieniony przez Minty 06-10-2006, 19:51, w całości zmieniany 2 razy  
 
     
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