MaxGaming Opublikowano 21 Września 2013 Udostępnij Opublikowano 21 Września 2013 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 Więcej opcji udostępniania...
Lechu4444 Opublikowano 21 Września 2013 Udostępnij Opublikowano 21 Września 2013 Według tego co tutaj jest napisane wychodzisz poza granicę tablicy w linijce która jest zaznaczona. Ja bym obstawiał że jak ustawiasz index tablicy na 1, nie powinno być tam 0 zauważ że jak tworzysz tablicę to masz indexy na 0 ustawione. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Września 2013 Udostępnij Opublikowano 22 Września 2013 Te pętle są okropne. :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 22 Września 2013 Udostępnij Opublikowano 22 Września 2013 Ja mam do was pytanie: skąd się wzięła ostatnio moda na dodawanie tych podkreślników przed zmiennymi? Przecież i tak nie wykraczają (zmienne) po za skrypt (zakładając że został użyty var), stąd nie rozumiem jaki w tym cel. Przecież to wygląda masakrycznie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MaxGaming Opublikowano 22 Września 2013 Autor Udostępnij Opublikowano 22 Września 2013 1. Żeby nie "nałożyły się" z innymi zmiennymi nie var. 2. Żeby łatwo byto odróżnić var. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 22 Września 2013 Udostępnij Opublikowano 22 Września 2013 Otóż błędnie. Jeśli deklarujesz zmienną w skrypcie (używając var), taka zmienna jest niepowtarzalna i nie wykracza po za skrypt. Ma to się też w drugą stronę. Po za skryptem po prostu nie istnieje. Takie jest przeznaczenie var-a. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 22 Września 2013 Udostępnij Opublikowano 22 Września 2013 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 Więcej opcji udostępniania...
Amaterasu Opublikowano 23 Września 2013 Udostępnij Opublikowano 23 Września 2013 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Września 2013 Administratorzy Udostępnij Opublikowano 24 Września 2013 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę