Skocz do zawartości

Poruszanie obrazu


kuba2153

Rekomendowane odpowiedzi

Niestety po tym co napisałeś, ciężko wyłapać gdzie jest błąd ;/ Najprawdopodobniej przekroczyłeś granicę tablicy(pewnie nie zadeklarowałeś) Daj to, gdzieś w evencie Game Start:

GML
//pod q i w podstaw rozmiar tablicy

q=30;

w=40;

for(i=0;i<=q;i+=1)

for(j=0;i<=w;j+=1)

global.inventory[i,j]=0;

Odnośnik do komentarza
Udostępnij na innych stronach

Ahmm. Znaczy bo ja to robiłem na podstawie przykładu ( https://forum.gmclan.org/index.php?showtopic=26624 ), więc myślałem, że to dobrze będzie ;P

 

 

Anty jeśli chodzi ci o to, że powinienem samemu tworzyć, to cię rozumiem ;P Ta gra to raczej mój taki samouczek. Jak czegoś nie wiem to pytam się was i zarazem ucze tego, oraz sklejam kod w całość, żeby był bez błędów.

Odnośnik do komentarza
Udostępnij na innych stronach

Wydaje mi się, że koleś po prostu popełnił błąd w tutku i zamiast 3 napisal 36:

GML
if (global.inventory[1,36] <> noone) {draw_sprite(global.inventory[1,4],global.inventory[1,4],view_xview[0]+920+24+(32*0),view_yview[0]+431+31+(32*0));}

if (global.inventory[2,36] <> noone) {draw_sprite(global.inventory[2,4],global.inventory[2,4],view_xview[0]+920+24+(32*1),view_yview[0]+431+31+(32*0));}

if (global.inventory[3,36] <> noone) {draw_sprite(global.inventory[3,4],global.inventory[3,4],view_xview[0]+920+24+(32*2),view_yview[0]+431+31+(32*0));}

if (global.inventory[4,36] <> noone) {draw_sprite(global.inventory[4,4],global.inventory[4,4],view_xview[0]+920+24+(32*3),view_yview[0]+431+31+(32*0));}

if (global.inventory[5,36] <> noone) {draw_sprite(global.inventory[5,4],global.inventory[5,4],view_xview[0]+920+24+(32*0),view_yview[0]+431+31+(32*1));}

if (global.inventory[6,36] <> noone) {draw_sprite(global.inventory[6,4],global.inventory[6,4],view_xview[0]+920+24+(32*1),view_yview[0]+431+31+(32*1));}

if (global.inventory[7,36] <> noone) {draw_sprite(global.inventory[7,4],global.inventory[7,4],view_xview[0]+920+24+(32*2),view_yview[0]+431+31+(32*1));}

if (global.inventory[8,36] <> noone) {draw_sprite(global.inventory[8,4],global.inventory[8,4],view_xview[0]+920+24+(32*3),view_yview[0]+431+31+(32*1));}

Zamień na:

GML
if (global.inventory[1,3] <> noone) {draw_sprite(global.inventory[1,4],global.inventory[1,4],view_xview[0]+920+24+(32*0),view_yview[0]+431+31+(32*0));}

if (global.inventory[2,3] <> noone) {draw_sprite(global.inventory[2,4],global.inventory[2,4],view_xview[0]+920+24+(32*1),view_yview[0]+431+31+(32*0));}

if (global.inventory[3,3] <> noone) {draw_sprite(global.inventory[3,4],global.inventory[3,4],view_xview[0]+920+24+(32*2),view_yview[0]+431+31+(32*0));}

if (global.inventory[4,3] <> noone) {draw_sprite(global.inventory[4,4],global.inventory[4,4],view_xview[0]+920+24+(32*3),view_yview[0]+431+31+(32*0));}

if (global.inventory[5,3] <> noone) {draw_sprite(global.inventory[5,4],global.inventory[5,4],view_xview[0]+920+24+(32*0),view_yview[0]+431+31+(32*1));}

if (global.inventory[6,3] <> noone) {draw_sprite(global.inventory[6,4],global.inventory[6,4],view_xview[0]+920+24+(32*1),view_yview[0]+431+31+(32*1));}

if (global.inventory[7,3] <> noone) {draw_sprite(global.inventory[7,4],global.inventory[7,4],view_xview[0]+920+24+(32*2),view_yview[0]+431+31+(32*1));}

if (global.inventory[8,3] <> noone) {draw_sprite(global.inventory[8,4],global.inventory[8,4],view_xview[0]+920+24+(32*3),view_yview[0]+431+31+(32*1));}

Jeśli to nie pomoże to nie wiem. Ogólnie to nie lubię korzystać z ekwipunku, etc. innego niż mojego autorstwa bo się gubię. Jak swój napiszę to wiem o co biega wszędzie :P

Oczywiście można tą ilość kodu zmniejszyć pętlą for :D

Odnośnik do komentarza
Udostępnij na innych stronach

Masz przykład, najprostszy bez zbędnych bajerów:

https://gmclan.org/up8194_12_inv.html

Pola w eq indeksują się w następujący sposób : obrazek

Jak przetestować?

Odpalasz w Debug mode(czerwona strzalka)

Klikasz E żeby otworzyć eq

Dajesz Tools>Execute code

No i skrypt dodający itemy do plecaka to additem(iditemka,ilosc), dla przedmiotów nie-stackujących się daj w ilość 0

1 - miecz

2 - tarcza

3 - moneta (stackuje sie)

Komentarze są ;)

PS Testowałem tylko dla inwentarza o rozmiarze 5x5

 

@EDIT Myślę, że mechanizm podnoszenia/wyrzucania przedmiotów już sobie sam zrobisz bo to chyba najłatwiejsza część (dodawanie przedmiotów już jest [additem(...)]) :P

Odnośnik do komentarza
Udostępnij na innych stronach

Pierwszy raz z GM'em się spotkałem chyba ze 2 lata temu. Pobawiłem się z pół roku i potem przerwa gdzieś na rok. A teraz wróciłem no i robię ;P

Wszystkich funkcji z GM'a nie da się całkiem nauczyć. Po prostu trzeba umieć znaleźć odpowiednią funkcję (np. w dokumentacji) i ją wykorzystać. Poza tym trzeba logicznie myśleć jak się coś pisze, bo nie da się tego wykuć na pamięć.

Musisz poznać oczywiście te wszystkie pętle itp. , żeby efektownie pisać :P

Odnośnik do komentarza
Udostępnij na innych stronach

Chcę jeszcze dodać, że w Drawie kontrolera jest pewien bug (tak to jest jak się na szybko robi przykład^^)\

Zamiast

GML
switch(global.eq[j*wys+i,0])

Powinno być:

GML
switch(global.eq[j*szer+i,0])

Nie ma to znaczenia jeśli używasz plecaka co ma taką samą szerokość jak wysokość, ale w przeciwnym wypadku będą źle numerowane pola.

Odnośnik do komentarza
Udostępnij na innych stronach

Ok ;) A mógłby mi ktoś powiedzieć, jak przerobić poniższy kod, żeby obrażenia były kierowane do tego wroga, którego aktualnie atakuje ?

 

GML
if dzialanie = 2 and distance_to_object(o_mob) <= 10 and bron_mam = 1 and mhp = true{

mhp = false

o_mob.hp1 -= damage

alarm[0] = 1.5 * room_speed

}

Odnośnik do komentarza
Udostępnij na innych stronach

Zadeklaruj w create potwora ilość jego hp (jako zmienną lokaną, nie globalną!)

GML
zyciemoba=100;

 

Przy kolizji z graczem(w obiekcie moba):

GML
if global.dzialanie = 2 and distance_to_object(o_gracz) <= 10 && global.bron_mam = 1 && global.mhp = true{

mhp = false

zyciemoba -= global.damage

alarm[0] = 1.5 * room_speed

}

Wtedy zmienne damage, bron_mam, mhp muszą być zmiennymi globalnymi

BTW. Ustawiłeś w alarmie[0] mhp=true?

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, tylko mi chodzi o to, że kiedy jest kilka mobów tego samego rodzaju, w roomie, to biorąc życie jednemu równocześnie zabiera wszystkim.

 

Znaczy wcześniej, wszystko chodziło gładko, tylko brało życie wszystkim mobom, a po kodzie Karolo, w ogóle nic się nie działo :/

Odnośnik do komentarza
Udostępnij na innych stronach

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

Jedynie 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ę poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...