TO_mek Opublikowano 1 Marca 2009 Udostępnij Opublikowano 1 Marca 2009 Witam! Czy mozna do skryptow przekazywac tablice? Mam kilka tablic globalnych m.in. global.Front [2,2] czyli 3x3 czyli 9 elementow. Zrobilem skrypt rysuj_tablice ktory wyswietla w odpowiednim miejscu na ekranie (parametry a,B) tablice za pomoca petli ale mam problem z wywolaniem tego skryptu. Skrypt rysuj_tablice: //argument0 - delta x //argument1 - delta y //argument2 - ktora tablica a:=argument0; b:=argument1; c:=argument2; for (i=0; i<=2; i+=1) { for (j=0; j<=2; j+=1) { draw_text(a+i*50,b+j*50,string(argument2[i,j])); } } Jak wywolanie w Draw wyglada tak: rysuj_tablice (50,50,global.Front) to wyswietla mi 9 razy wartosc z pozycji 0,0 Jak to powinno wygladac prawidlowo? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 1 Marca 2009 Udostępnij Opublikowano 1 Marca 2009 Metoda 1. Po prostu w funkcji używaj zmiennej danego obiektu. Wady - będzie to funkcja mało uniwersalna. Metoda 1. Poczytaj w helpie o funkcjach zaczynających się na "variable_". Dzięki temu możesz modyfikować zmienne o nazwie pobranej ze stringa. Wady - cholernie niewydajne :P Ed: Nie analizowałem kodu, ale spojrzałem tylko u ujrzałem "zmienna := wartość". Tak też jest CHYBA dobrze, ale raczej powinno być "zmienna = wartość". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Marca 2009 Administratorzy Udostępnij Opublikowano 1 Marca 2009 Jeżeli wywołujesz skrypt z obiektu, to skrypt "widzi" tą tablicę bez przekazywania jako argument. W sumie, to przekazywanie argumentów to taka ściema trochę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 1 Marca 2009 Udostępnij Opublikowano 1 Marca 2009 W sumie, to przekazywanie argumentów to taka ściema trochę.Rozwiń myśl. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Marca 2009 Administratorzy Udostępnij Opublikowano 1 Marca 2009 Zrób nowy skrypt "test" GML //test(); show_message( abc ); teraz w cretate daj GML abc = 'xxx'; test(); No i bez przekazywania argumentów skrypt działa. Problem jest taki, że jak obiekt nie ma zmiennej abc, to wtedy będzie error, ale i na to jest rada: GML //test(); var pokaz; if ( variable_local_exists('abc') and argument0==0 ) { pokaz = string(abc); } else { pokaz = string(argument0); } show_message( pokaz ); No i teraz możesz przekazać argument do skryptu, lub nie podać nic i on wtedy postara się poszukać zmiennej abc w tym obiekcie, a jak nie to wywali argument0. Jak widać argument można podać, ale nie trzeba, bo skrypt jest odpalany jakby "spod" obiektu i widzi wszystkie jego zmienne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 3 Marca 2009 Autor Udostępnij Opublikowano 3 Marca 2009 Gnysek ale tu bardziej chodzi o przekazywanie w druga strone. Mam 6 tablic nazwanych Front, Back, Top, Down, Left, Rigth. Tworze skrypt ktory robi dokladnie to samo dla kazdej z tych tablic, jedyny problem to tak wywolac ten skrypt zeby jako parametr podac o ktora z tych 6ciu tablic chodzi. Tak jak podajesz to w sumie skrypt jako tako ma sens tylko po to jak jest wywolywany ten sam kawalek kodu w wielu miejscach, a mi chodzi jeszcze o uniwersalnosc (ten sam kawalek kodu w wielu miejscach dla podobnych zmiennych/tablic/obiektow). Dawidds pkt1 odpada, pkt2 czytam helpa i juz wiem (patrz nizej), deklaracja := jak najbardziej mozna stosowac (w koncu GML to zlepek i pascala i C) Czyli zamiast wywolac: rysuj_tablice (50,50,global.Front); wywoluje: rysuj_tablice (50,50,'Front'); a w skrypcie zamiast: draw_text(a+i*50, b+j*50,string(argument2[i,j])); daje draw_text(a+i*50, b+j*50, variable_global_array2_get(argument2,i,j)); ... no i dziala. Co do wydajnosci to nie mam na razie porownania bo to malutka tablica jest. 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ę