Skocz do zawartości

Wypełnianie tablicy


MaxGaming

Rekomendowane odpowiedzi

No więc tak. Mam system(własny) grafik. Od razu mówię, że to jest dziwny projekt, bo ma być słabo zoptymalizowany(wiem, że najczęściej zamiarem jest jak najlepsze zoptymalizowanie, ale nie tym razem). Mam tak jakby 2 tablice w jednej.

Dajmy na to mam taki obrazek:

x X

Z

 

Gdzie x to kolor CX a Z to kolor CZ:

GML
//pół tablicy z pikselami

tablica[0, 0]=1;

tablica[1, 0]=0;

tablica[2, 0]=1;

 

tablica[0, 1]=0;

tablica[1, 1]=1;

tablica[2, 1]=0;

//połowa z kolorami

tablica[3, 2]=CX;

tablica[4, 2]=0;

tablica[5, 2]=CX;

 

tablica[3, 3]=0;

tablica[4, 3]=CZ;

tablica[5, 3]=0;

 

Jeszcze raz - wiem, że to najgorszy sposób + to, że można to zrobić na jednej takiej połowie(same kolory, a wartość -1 w kolorze oznacza że w ogóle go nie ma), ale to TAK MA BYĆ. Nie pytajcie nawet po co ma być słaba optymalizacja, bo to bardzo skomplikowane, ale do rzeczy.

 

Mam taki kod na przygotowanie(wypełnianie domyślnymi wartościami) tablicy:

GML
var _i, _j;

_i=1;

_j=1;

repeat(gHeight)

{

repeat(gWidth)

{

gSpr[_i, _j]=0;

_i+=1;

};

_i=1;

_j+=1;

};

var _i, _j;

_i=1+gHeight;

_j=1+gWidth;

repeat(gHeight)

{

repeat(gWidth)

{

gSpr[_i, _j]=TGD1;

_i+=1;

};

_i=1;

_j+=1;

};

 

A to fragment odpowiadający za rysowanie.

GML
var _i, _j;

_i=1;

_j=1;

repeat(gHeight)

{

repeat(gWidth)

{

if(gSpr[_i, _j] == 0)

{

draw_nonpoint(x+((_i-1)*8), y+((_j-1)*8));

}else{

draw_set_color(gSpr[_i+(gSpr[0, 0]), _j+(gSpr[0, 1])]);

draw_point(x+((_i-1)*8), y+((_j-1)*8));

};

_i+=1;

};

_i=1;

_j+=1;

};

 

I kiedy gWidht(szeokość) i gHeight(wysokość) ma podobną wartość jest wszystko ok,

ale kiedy np: gWidth=gHeight*3 etc. wtedy wykasuję błąd, że brak zmiennej, lub opuściłem tablicę. Raczej to drugie.

I czemu, skoro wypełniam ją niemlże tym samym kodem?

Mogę na pw wysłać projekt, jeżeli ktoś woli.

 

Z góry dziękuje za pomoc :)

 

@e: Po dłuższej analizie, to nie chodzi o dużą różnicę, więc nie znam żadnej zależności :/

Ale na przykład jest to

GML
gWidth=8;gHeight=12;

 

@e2: Ten błąd:

___________________________________________

ERROR in

action number 1

of Draw Event

for object oWorkPlace:

 

Error in code at line 14:

draw_set_color(gSpr[_i+(gSpr[0, 0]), _j+(gSpr[0, 1])]);

^

at position 21: Unknown variable gSpr or array index out of bounds

Odnośnik do komentarza
Udostępnij na innych stronach

podkreslniki "_variable" lub prefixy "mVariable" to powszechny sposob na czytelne oznakowanie zmiennych prywatnych, ktore nie powinny byc uzywane publicznie bez wiedzy do czego sa uzywane, ot (GM tak jak JS nie posiada wbudowanego sposobu na zapobieganie uzycia konkretnych zmiennych publicznie - wszystkie zmienne sa publiczne, stad taki symboliczny spsob zapisu mowi koderowi: "jestem zmienna prywatna, nie powinienes mnie modyfikowac, jesli nie wiesz, do czego sluze").

Odnośnik do komentarza
Udostępnij na innych stronach

Skorzystaj z pętli for. Oszczędzisz sobie zarówno deklarowania zmiennych za pomocą var _i, _j; , jak i ręcznego zwiększania zmiennych.

W ten sposób pierwszy skrypt będzie wyglądał tak:

GML
for(i = 0; i < gHeight; i += 1)

for(j = 0; j < gWidth; j += 1)

{

gSpr[j,i]=0;

gSpr[j+gWidth,i+gHeight] = TGD1;

}

Zmień sobie drugi skrypt wg wzoru.

 

E: i += 1 poprawione. Nie pomyślałem też o tym rozszerzaniu tablicy (nigdy nie zwracam na to uwagi, ale skoro o tym wspominasz, to pewnie ma jakieś znaczenie).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Zalecanym sposobem wypełniania tablic przez YYG jest robienie tego od tyłu (od drugiego elementu), bo wtedy nie rozszerzasz w każdym kroku tablicy.

 

GML
for(j = gWidth - 1; j >= 0; j -= 1)

for(i = gHeight - 1; i >= 0; i -= 1)

{

gSpr[j,i]=...;

...

}

 

btw. masz dwa razy i+=1 powyżej

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