Skocz do zawartości

Edytor plansz


Jaklub

Rekomendowane odpowiedzi

Nie wiem, czy to jest odpowiednie forum na ten temat.

 

Pobrałem wasz przykład edytora plansz. Chciałem go użyć, ale mam pewien błąd.

 

Chciałem zmienić rozmiar kratki edytora z 32*32 na 16*16.

 

W związku z tym:

Skrypt wczytywania planszy działa poprawnie.

Ale w skrypcie zapisywania jest jakiś błąd.

A mianowicie to nie chce zapisywać! :boxed:

 

Skrypt

file_open_write("plansza.txt");
for(a=0;a<15;a+=1)
   {
   for(i=0;i<20;i+=1)
      {
      if(place_meeting(i*32,a*32,blok))file_write_string('1'); //aby dodac nowy obiekt trzeba skopiowac
      else                                                     //te dwie linijki
      if(place_meeting(i*32,a*32,mis))file_write_string('2');
      else
      if(place_meeting(i*32,a*32,klucz))file_write_string('3');
      else
      file_write_string('0');
      file_writeln();
      }
   }
file_close();

 

zmieniłem na:

fiel='plansza.lev'
file_open_write(fiel);
file_write_string(global.skin);
file_writeln();
file_write_string(background_color);
file_writeln();
for(a=0;a<30;a+=1)
   {
   for(i=0;i<40-16;i+=1)
      {
      if(place_meeting(i*16,a*16,obj_playermap))file_write_string('1'); //aby dodac nowy obiekt trzeba skopiowac
      else                                                     //te dwie linijki
      if(place_meeting(i*16,a*16,obj_floor))file_write_string('2');
      else
      if(place_meeting(i*16,a*16,obj_clangfloor))file_write_string('3');
      else
      if(place_meeting(i*16,a*16,obj_metalfloor))file_write_string('4');
      else
      file_write_string('0');
      file_writeln();
      }
   }
file_close();

 

Jest to skrypt zapisywania mapy. Zapisuje on, prócz objektów, wybrany skin postaci i kolor tła.

 

Czy ktoś może pomóc? :(

 

PS. Jeśli ktoś myśli, że to skrypt wczytywania jest niepoprawny, jest w błędzie - edytowałem plik samodzielnie, by to sprawdzić.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie lubię takich skryptów jak ten którego używasz :P Dlatego napisałem własny:

 

Wszystko w scripts:

zapisz

//zapisz(nazwa_mapy);

//UWAGA!
//Wykonywac tylko 1 raz na 1 step!

//Nazwa pliku:
file_name = argument0;

zmienne_n = 0;
obiekty_n = 0;

//Lista obiektow do zapisania:
dadaj_obiekt('ob_gracz');
dadaj_obiekt('ob_przeciwnik');
dadaj_obiekt('ob_platforma');
dadaj_obiekt('ob_data');

//Lista zmiennych obiektow (wszystkich) do zapisania:
dodaj_zmienna('x',0);
dodaj_zmienna('y',0);
dodaj_zmienna('sprite_index',0);
dodaj_zmienna('image_index',0);
dodaj_zmienna('direction',0);

//Tylko dla obiektu 'ob_data':
dodaj_zmienna('skin','ob_data');
dodaj_zmienna('tlo','ob_data');

//Reszta Cie nie interesuje :P
instance_deactivate_all(1); instance_activate_all();

file_open_write(file_name);

for(n=0;n<instance_count;n+=1;)
{
    i = instance_id[n];
    
    if instance_exists(i)
    {
        for(a=0;a<obiekty_n;a+=1;)
        {
            if obiekty[a] = string(object_get_name(i.object_index))
            {
                file_write_string('['+string(object_get_name(i.object_index))+';');
                
                for(b=0;b<zmienne_n;b+=1;)
                {
                    dd=false;
                    
                    if zmienne[b,1] != '0'
                    {
                        if zmienne[b,1] != string(object_get_name(i.object_index))
                        {
                            dd=true;
                        }
                    }
                    
                    if dd=false
                    {
                        execute_string('val = i.'+string(zmienne[b,0])+';');
                        
                        if is_string(val)
                        {
                            val = '"'+string(val)+'"';
                        }

                        file_write_string(string(zmienne[b,0])+';'+string(val)+';');
                    }
                }
                
                file_write_string(']');
                break;
            }
        }
    }
}

file_close();

dadaj_obiekt

//dadaj_obiekt(nazwa_obiektu);
obiekty[obiekty_n] = string(argument0);

obiekty_n += 1;

dodaj_zmienna

//dodaj_zmienna(nazwa_zmiennej,nazwa_obiektu);
zmienne[zmienne_n,0] = string(argument0);
zmienne[zmienne_n,1] = string(argument1);

zmienne_n += 1;

odczytaj

//odczytaj(nazwa_mapy);

//UWAGA!
//Wykonywac tylko 1 raz na 1 step!
//Uzywac tylko w pustym roomie :) Wiadomo dlaczego.

file_name = string(argument0);
file_open_read(file_name);

map_str = file_read_string();

file_close();

dt = string_count('[',map_str);
dt2 = string_count(']',map_str);

if dt != dt2
{
    show_error('To nie plik mapy!',1);
    exit;
}

repeat(dt)
{
    temp = string_replace_all( string_replace_all( string_copy(map_str,0,string_pos(']',map_str)-1),'[',''),']','');
    
    map_str = string_replace(map_str,'['+temp+']','')
    
    obiekt=string_copy(temp,0,string_pos(';',temp)-1);
    temp=string_replace(temp,obiekt+';','');
    
    dt3 = string_count(';',temp)/2;
    n = 0;
    
    repeat(dt3)
    {
        zmienna[n] = string_copy(temp,0,string_pos(';',temp)-1);
        temp = string_replace(temp,zmienna[n]+';','');

        wartosc[n] = string_copy(temp,0,string_pos(';',temp)-1);
        temp = string_replace(temp,wartosc[n]+';','');
        n += 1;
    }
    
    execute_string('i=instance_create(0,0,'+obiekt+');');
    
    n=0;
    
    repeat(dt3)
    {
        execute_string('i.'+zmienna[n]+'='+wartosc[n]+';');
        
        n+=1;
    }
}

I tyle. Działa to trochę powoli ale sprawnie :) Liczę że pojawię się w creditsach jeśli wasze gry się ukażą ;)

 

EDIT

Jeszcze przykład:

https://gmclan.org/up152_11_mapa.html

Dodać na GMC? ;]

Odnośnik do komentarza
Udostępnij na innych stronach

  • 17 lat później...

@Tymon <przeciera oczy> czy Ty popełniłeś ECS w prehistorycznym GMie?

ENTITY
Przy użyciu dadaj_obiekt zarządzasz tablicą stringów, którą wykorzystujesz potem jak tablicę wskaźników.

if obiekty[a] = string(object_get_name(i.object_index))

COMPONENT

//Lista zmiennych obiektow (wszystkich) do zapisania:
dodaj_zmienna('x',0);
dodaj_zmienna('y',0);
dodaj_zmienna('sprite_index',0);
dodaj_zmienna('image_index',0);
dodaj_zmienna('direction',0);

SYSTEM

for(n=0;n<instance_count;n+=1;)
{
    i = instance_id[n];
    
    if instance_exists(i)
    {
        for(a=0;a<obiekty_n;a+=1;)
        {
            if obiekty[a] = string(object_get_name(i.object_index))
            {
                file_write_string('['+string(object_get_name(i.object_index))+';');
                
                for(b=0;b<zmienne_n;b+=1;)
                {
                    dd=false;
                    
                    if zmienne[b,1] != '0'
                    {
                        if zmienne[b,1] != string(object_get_name(i.object_index))
                        {
                            dd=true;
                        }
                    }
                    
                    if dd=false
                    {
                        execute_string('val = i.'+string(zmienne[b,0])+';');
                        
                        if is_string(val)
                        {
                            val = '"'+string(val)+'"';
                        }

                        file_write_string(string(zmienne[b,0])+';'+string(val)+';');
                    }
                }
                
                file_write_string(']');
                break;
            }
        }
    }
}


to jest Entity Component System 😆😆 😆

Edytowane przez alkapivo
Fragmenty z kodem powinny być poprawnie sformatowane przy użyciu tagów.
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ę...