Skocz do zawartości

Przekazywanie zmienny do funkcji


Rekomendowane odpowiedzi

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

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

  • Administratorzy

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

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

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