Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

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!

Opublikowano

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.

  • Administratorzy
Opublikowano

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

Opublikowano
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()

  • Administratorzy
Opublikowano

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 :)

Opublikowano

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

  • Administratorzy
Opublikowano

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

Opublikowano

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

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