Skocz do zawartości

Granica tablicy


Rekomendowane odpowiedzi

Jestem już chyba ślepy, bo nie widzę gdzie tutaj błąd mam:

o_system create

GML
maxrzad=9;

maxmiejsce=14;

for(r=0;r<=maxrzad;r+=1)

{

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

{

itemk[i,r]=-1;

}

}

 

for(r=0;r<=maxrzad;r+=1)

{

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

{

itemki[i,r]=0;

}

}

 

itemk[0,0]=0

itemk[1,0]=1

itemk[2,0]=2

 

itemki[0,0]=4

itemki[1,0]=2

itemki[2,0]=1

 

o_item.step

GML
if o_system.itemrodzaj[item]=5

{

for(r=0;r<=o_system.maxrzad;r+=1)

{

for(i=0;i<=o_system.maxmiejsce;i+=1)

{

if o_system.itemk[i,r]=-1

{

o_system.itemk[i,r]=item;

instance_destroy();

}

}

}

}

 

Błąd:

___________________________________________
################################################################################
############
FATAL ERROR in
action number 1
of  Step Evento_gracz
for object o_item:

Push :: Execution Error - Variable Index [14,0] out of range [14,-1] - 0.itemk(100162,448000)
at gml_Object_o_item_CollisionEvent_17_1 (line 72) -         if o_system.itemk[i,r]=-1
################################################################################
############

Odnośnik do komentarza
Udostępnij na innych stronach

Nie jestem pewny ale coś tu nie gra

 

GML
if o_system.itemk[i,r]=-1

{

o_system.itemk[i,r]=item;

instance_destroy();

}

 

nie powinno być czasami?

GML

if o_system.itemki[i,r] == -1; //<---

{

//...

}

 

ale nie jestem pewny

 

EDIT: OPS Tymon szybszy, bardziej się zna :P :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jestem już ślepy ;_;

Godzinę przyglądałem się wszystkiemu, a tego nie zauważyłem, mimo, że zwracałem na to uwagę...

Dzięki.

 

E: Jak ty chcesz dać średnik w ifie? I podwójny znak równości nie jest wymagany, to nie C# czy coś.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie jestem pewny ale coś tu nie gra

 

 

 

nie powinno być czasami?

GML

if o_system.itemki[i,r] == -1; //<---

{

//...

}

 

ale nie jestem pewny

 

EDIT: OPS Tymon szybszy, bardziej się zna :P :)

W C++ czy innych podobnych językach programowania taki zapis jaki przedstawił Boad przypisałby o_system.itemki[i,r] wartość -1 i wykonał to co jest w środku bloków poprzedzonych warunkiem za każdym, bo operacja przypisania zwraca wartość true i się wykonuje, ale GML jest trochę nielogiczny pod tym względem a to dlatego że można w nim stosować polecenia z Pascala, to znaczy nie wiem czy zadziała pętla for i czy będą działały bloki begin i end, ale w każdym razie porównywanie zmiennych działa jak w Pascalu co nie oznacza że powinno się mieszać te 2 style, ogólnie lepiej przyzwyczajać się do == bo później łatwiej z GMa przestawić się na inne języki. :)

Odnośnik do komentarza
Udostępnij na innych stronach

To nie jest nielogiczne, to dobrze że GML jest uproszczony i przystosowany dla początkujących programistów, mi samemu dużo dała znajomość GML jako podstawa do nauki "prawdziwych" języków. Przyjazne dla amatorów, a osoba bardziej zaawansowana i tak ma już dobre nawyki i używa prawidłowych operatorów porównania, średników, nawiasów przy warunkach (przynajmniej w Javie, bo widzę że tutaj nikt o tym nie wspomniał) itd.

A z kolei na moich warsztatach z GM, uczę już od razu dobrych nawyków, a o ułatwieniach GML-a tylko wspominam, no ale większość studentów miała już jakąkolwiek styczność z programowaniem, więc uczenie podstaw nie ma sensu :P

 

Także polecam dbać o odpowiedni zapis i formatowanie kodu.

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ę...