Skocz do zawartości
Threef

Identyfikator "Obiektu"

Rekomendowane odpowiedzi

Mam problem.

Stworzyłem edytor map który przechowuje nazwy obiektów w ds_grid. Później przy pomocy ds_grid_write() zapisuję wszystko do pliku. Zapisywanie i wczytywanie działa idealnie, problem pojawia się gdy chcę wczytać mapę już w grze.

GML
h=ds_grid_create(32,32)

ds_grid_clear(h,o_block_grass)

Problem już rozpracowałem. Chodzi o to że zamiast "o_block_grass" w gridzie pojawia się np.: "14", które (jak mi się wydaje) jest identyfikatorem obiektu. Taki identyfikator jest przyznawany obiektom wg kolejności ich utworzenia w GM-ie, tak więc "14" odpowiada 14-stemu obiektowi utworzonemu przeze mnie. Problem polega na tym że w grze 14-stym obiektem nie jest "o_block_grass".

Ja teraz potrzebuję uniwersalnego sposobu na kodowanie i dekodowanie tego, coś jak np.:

GML
h=ds_grid_create(32,32)

ds_grid_clear(h,string(o_block_grass))

Tak żeby zamiast "14" na prawdę pojawiało się tam "o_block_grass".

 

Pomóżcie bo inaczej Shil mnie zabije!

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Zamiast bawić się w dodawanie kolejnych różnych obiektów, stwórz sobie jeden obiekt i w zależności od tego czym ma być zmieniaj mu parametry. Możesz też zastosować switcha jeżeli znasz ID wszystkich obiektów.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Zamiast id zapisuj nazwę obiektu.

GML
ds_grid_clear(h,"o_block_grass")

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dobrze ediepl, sam to napisałem w swoim poście. Problem jak to teraz odczytać.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W grze:

 

GML
var obj;

switch (wartość_zdjęta_z_grida) {

case 14: obj = jakis_obiekt; break;

case ...: ... break;

}

instance_create(x,y,obj);

 

Tak to mniej więcej obchodzę w Almorze... mniej więcej, bo tam każdy element na mapie to ten sam obiekt, tylko z inną grafiką. Ponieważ grafiki i tak zapisuję w ds_mapie po nazwach (string), a typy obiektów otocznia tak samo, nie ma konfliktów pomiędzy edytorem a grą (bo wszystko i tak jest czytane z plików zew.)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

może spróbuj coś pokombinować z object_get_name?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
GML
var obj;

switch (wartość_zdjęta_z_grida) {

case 14: obj = jakis_obiekt; break;

case ...: ... break;

}

instance_create(x,y,obj);

To najgorsze rozwiązanie jakie mógłbym obrać, aktualnie mam prawie 60 obiektów, a czekam na nowe. Tak czy inaczej chyba będę musiał zrobić taką listę obiektów, chyba że można uzyskać odniesienie do obiektu podając jego nazwę jako string. Potrzeba mi właśnie czegoś odwrotnego do object_get_name()

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Niestety takiej opcji nie ma, chyba, że z execute_string(); Trzeba było to przemyśleć zanim się zrobiło 60 obiektów, ja tak zrobiłem i teraz jest z górki :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

GML (create)
oMap=ds_map_create();

for(i=0;i<65536;i+=1;)

{

if(object_exists(i))

{

ds_map_add(oList,i,object_get_name(i));

}

}

I masz mapę z obiektami jeżeli chcesz się tak męczyć.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Też jest to jakieś wyjście :) Szukasz po wartości i masz id obiektu (klucz). Mapy pozwalają szukać po obu wartościach (key,value) :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

No i jednak zrobiłem switch. Najbardziej się obawiałem tego że nie znam identyfikatorów poszczególnych obiektów, ale poradziłem sobie wyrzucając show_message gdy nie mam w switch-u danego ID

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×