Skocz do zawartości
  • Ogłoszenia

    • Uzjel

      GMClan wrócił!   12.08.2017

      GMClan.org już działa, więc jeżeli ktoś wchodził przez adres forum.gmclan.org to może już wrócić do starych zwyczajów. Jeżeli strona wam się nie wyświetla to wyczyście cache i ciasteczka.
    • gnysek

      Świętujemy urodziny GMCLANu ?   16.08.2017

      Wypowiedzcie się! http://forum.gmclan.org/index.php?/topic/34002-15-lat-gmclanu-świętujemy  

Rekomendowane odpowiedzi

Sutikku    0

Moją pięta Achillesa od zawsze było robienie ekwipunku. Przeważnie to było draw_text() zamiast ekwipunku.

Przykłady znalezione w internecie, przeważnie posiadały dużo kodu, albo nie mogłem zrozumieć/nie chciałem (lenistwo wrogiem człowieka)

albo trzeba było dawać kod do każdego obiektu, co mnie troszkę zrażało.

Tym razem na potrzeby własnej gry, wziąłem się do pracy i stworzyłem własny, bardzo prosty ekwipunek. Może nie powala funkcjonalnością, czy też możliwościami, ale wierzę, że komuś się przyda.

A tutaj link http://gmclan.org/up9511_12_ProstyEkwipunek.html Wersja GM 8.0

Tworzymy obiekt ekwipunku. W create wstawiamy kod

GML (CREATE)
maksEkw=6 //maksymalna wielkosc ekwipunku, ostatni element tablicy nie jest wykorzystywany

//petla itemow

for(i=0; i<maksEkw; i+=1) //

{

global.ekwipunek=-1

}

W draw wstawiamy taki oto kod

GML (Draw)
for(i=0; i<maksEkw; i+=1)

{

if!(global.ekwipunek==-1)

{

draw_sprite(spr_box, global.ekwipunek, x+(i*33), 32) // sprite ma rozmiar 32, ale dalem 33 zeby byl odstep

}

}

. Mam stworzony sprite spr_box, a w nim 3 klatki, każda to inna skrzynka/obiekt. A to kod do step (chciałem to zrobić optymalniej ale zawiodłem)

GML (Step)
if keyboard_check_pressed(ord('1'))

{

check_ekw(1-1) //daje tutaj 1-1, zamiast 0, aby w przyszlosci wiedziec co robie i sie nie pogubic.

}

 

if keyboard_check_pressed(ord('2'))

{

check_ekw(2-1)

}

 

if keyboard_check_pressed(ord('3'))

{

check_ekw(3-1)

}

 

if keyboard_check_pressed(ord('4'))

{

check_ekw(4-1)

}

 

if keyboard_check_pressed(ord('5'))

{

check_ekw(5-1)

}

 

if keyboard_check_pressed(ord('6'))

{

check_ekw(6-1)

}

Skrypt check_ekw wygląda tak:

GML (checkekw)
ii=argument0

if !(global.ekwipunek[ii]==-1)

{

switch(global.ekwipunek[ii])

{

case 0:

score+=3

global.ekwipunek[ii]=-1

break;

 

case 1:

score+=15

global.ekwipunek[ii]=-1

break;

 

case 2:

instance_create(random(640), random(480), obj_item)

global.ekwipunek[ii]=-1

break;

}

}

. case 0, to inaczej klatka 0. Ponieważ w przykładzie nie robiłem postaci, kod zbierania itemków mam w obiekcie,

ale nic nie stoi na przeszkodzie aby pokazany tutaj kod dawać w kolizji z itemkiem.

Obiekt Itemku - Create

GML (CREATE)
image_speed=0

image_index=choose(0,1,2) //to dla zroznicowania itemkow</span></span></span></span>

A kod zbierania, w tym przypadku po naciśnięciu myszką na item

GML (zbieranie)
for(i=0; i<obj_ekwipunek.maksEkw; i+=1)

{

if(global.ekwipunek==-1)

{

global.ekwipunek=image_index

i=obj_ekwipunek.maksEkw //to zeby zakonczyc petle, nie jestem pewien czy nie wystarczy samo break;

instance_destroy();

}

}

Piszcie uwagi, bluzgi, czy co tam chcecie :)

Zapomniałem dopisać, że jest pod GM 8.0, bo na czas robienia nowej gry, musiałem się przenieść.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Sutikku    0

Dziękuje za opinie :) Na początku miało się używać przedmioty przez naciśnięcie kursorem, ale to wtedy nie byłby tytułowy Najprostszy Ekwipunek.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Sutikku    0

MiniAktualizacja. Ponieważ jest to kwestia zamiany paru linijek kodu dam tutaj. Za pomocą tej zmiany teraz można powiększać ekwipunek. Na tej samej zasadzie zmniejszać.

W create obj_ekwipunek

GML (create)
maksEkw=3 //maksymalna wielkosc ekwipunku, ostatni element tablicy nie jest wykorzystywany

//petla itemow

for(i=0; i<9; i+=1) //

{

global.ekwipunek=-1

}

Teraz 9 wyznacza maksymalny ekwipunek jaki można mieć. Po naciśnięciu spacji, zebrania nowego plecaka, czy jeszcze czegoś innego powiększanie ekwipunku.

GML (akcja)
if(maksEkw<9)

maksEkw+=1

. I w step dodać wszystkie wciśnięcia klawisza do 9
GML (step)
if keyboard_check_pressed(ord('9'))

{

check_ekw(9-1) //daje tutaj 1-1, zamiast 0, aby w przyszlosci wiedziec co robie i sie nie pogubic.

}

I tak od 1, do 9.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
gnysek    22

Upraszczamy event step:

 

GML
var i;

for(i=1; i<9; i++) {

if keyboard_check_pressed(ord(string(i)))

{

check_ekw(i-1);

}

}

 

5x mniej kodu.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×