Skocz do zawartości

Nazwa obiektu w zmiennej.


PRT

Rekomendowane odpowiedzi

Witam, coś się dzisiaj ze mną dzieje i nie myślę trzeźwo(jestem po podwójnej osiemnastce).

Mianowicie chciałem wprowadzić taki kod, by tworzyło mi obiekty po kolei o nazwach p_xxx w miejsce xxx jakaś nazwa. Kod wyglądał tak

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

{

tworz="p_"+string(global.nazwa[i,0]);

instance_create(0+(i*50),1,string(tworz))

}

w tablicy global.nazwa znajdują się zmienne tekstowe np "Kanapka" ;]

istnieje obiekt p_Kanapka lecz nie tworzy się on ale jakiś inny ;]

Tu moje pytanie czy można w funkcji instance_create dać zamiast nazwy obiektu , zmienną ? Jeśli tak to jak to dokładnie zrobić ;].

 

Drugie pytanie to, jeśli mam 2 identyczne obiekty(pod względem spritów również) i leża one dokładnie na sobie. Złudnie przypominając jeden obiekt, to czy da się zrobić tak by po kliknięciu na niego zareagował tylko ten na powierzchni ;] mają ten sam depth. W tym pytaniu chodzi mi głównie o naprowadzenie, jak to zrobić ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Tu moje pytanie czy można w funkcji instance_create dać zamiast nazwy obiektu , zmienną ? Jeśli tak to jak to dokładnie zrobić ;].

 

Tak, da sie.

 

GML
objekt = p_kanapka;

instance_create(x,y,objekt);

 

instance_create(0+(i*50),1,string(tworz))

Po co string(tworz)? Przeciez tworz juz jest stringiem...

 

Co do drugiego to nie wiem, sam sie nad tym zastanawialem ^^

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Da się dokładnie tak jak chcesz:

 

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

{

var tworz,xx;

tworz='p_'+string(global.nazwa[i,0]);

xx=string(i*50);

execute_string( 'instance_create('+xx+',1,'+tworz+');' );

}

 

@Nobody: objekt = p_kanapka; - to przypisanie id, a nie zmiennej tekstowej. Zrób takie coś: show_message(string(p_kanapka)); i sprawdź co zostanie pokazane...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Sprytnie zrobione ^^ Ja bym o czyms takim nie pomyslal ^^ Musze sie jeszcze pouczyc tego GMLa ^^

 

 

W ten sposób możesz np. dawać do kolejki (ds_queue...) skrypty wysyłane z różnych obiektów, a potem systematycznie co kilka sekund jakiś obiekt będzie je wykonywać, uważajac, aby kolejka nie była za długa :P

No i można w stringach przechowywać np. pozycję itd, razem z przecinkiem, dla oszczędności miejsca... setki rzeczy można :P

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuję bardzo ;)

 

Drugi problem jest mniej ważny ;)

 

EDIT:

A jeśli chcę, zmiennej tworz(która przechowuje nazwę obiektu) dopisać zmienną lokalną tego obiektu ? ;P

Czyli :

GML
jakas_zmienna=tworz.nazwa

 

//tworz = string(nazwa_obiektu)

 

pokazuje mi, że niepoprawny index, tego się spodziewałem jak to ubrać w execute_string.

;]

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

GML
//tworz=string(nazwa_obiektu); albo np. tworz='obj_klocek';

execute_string('jakas_zmienna='+tworz+'.nazwa');

 

ew. local_variable_get / global_variable_get też może coś pomóc, ale musiał bym sprawdzić, czy zadziała podobnie...

Odnośnik do komentarza
Udostępnij na innych stronach

GML
COMPILATION ERROR in string to be executed

Error in code at line 1:

prowincja=.nazwa

 

at position 11: Unexpected symbol in expression.

 

pewnie jakaś gafa.

 

kod:

 

GML
tworz=string(global.nazwa[i,0])

obb=instance_create(0,0,ob)

obb.panstwo=panstwo

execute_string('prowincja='+tworz+'.nazwa');

Odnośnik do komentarza
Udostępnij na innych stronach

Podałem go, kiedy edytowałem poprzedniego posta.

Oto on:

GML
tworz=string(global.nazwa[i,0])

obb=instance_create(0,0,ob)

obb.panstwo=panstwo

execute_string('prowincja='+tworz+'.nazwa');

 

Błąd pojawia się przy wykonywaniu execute_string.

Odnośnik do komentarza
Udostępnij na innych stronach

Ta linijka:

GML
execute_string('prowincja='+tworz+'.nazwa');

jest dobrze.

 

Pokombinuj z tą linijką:

GML
tworz=string(global.nazwa[i,0])

Zmienna 'tworz' wynosi pewnie '' więc wychodzi:

'prowincja='+''+'.nazwa' czyli 'prowincja=.nazwa'

 

Poszukaj gdzie występuje zmienna global.nazwa[i,0] i tam pomyszkuj albo dla świętego spokoju:

GML
tworz=string(global.nazwa[i,0]);

obb=instance_create(0,0,ob);

obb.panstwo=panstwo;

if (tworz<>'')

execute_string('prowincja='+tworz+'.nazwa');

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