Skocz do zawartości

Zablokowane ladowanie PODCZAS gry


M@ti002

Rekomendowane odpowiedzi

tak jak w temacie. po dluzszej przerwie znow zaczalem tworzyc i mam kolejny problem.

otoz jak zrobic zeby elementy z gry (czytaj poziomy :P ) sie ladowaly tak jak w profesionalnych grach na skale swiatowa? bo zalozmy mam 50 leveli dosc sporych i zeby sie gra pol roku na slabszych pecetkach nie ladowala :D

Odnośnik do komentarza
Udostępnij na innych stronach

Musisz wymyśleć ogólną strukturę Twoich plików z levelami, później napisanie skryptu na wczytywanie i zapisywanie leveli (możesz zrobić własny Level Designer).

Ja tak zrobiłem:

W create zadeklarowałem struktury danych:

global.object = ds_list_create();
ds_list_add(global.object,object0);
ds_list_add(global.object,object1);
ds_list_add(global.object,object2);
ds_list_add(global.object,object3);
global.objects = ds_list_create();
global.tilesLeft = ds_list_create();
global.tilesTop = ds_list_create();
global.tilesX = ds_list_create();
global.tilesY = ds_list_create();
global.tileid = ds_list_create();
global.insid = ds_list_create();

Możesz zrobić strukturę pliku lvl np.

0@16x32:0&2
^ ^  ^  ^ ^
1 2  3  4 5

1 - to id obiektu (zadeklarowany w global.obiekt)

2 - x obiektu

3 - y obiektu

4 - pozycja x tilesa (w background)

5 - pozycja y tilesa (w background)

Zabieramy się teraz za napisanie skryptu ładującego:

/*
  © Kryniak
  Opis:        Skrypt ładuje poziom z pliku i dodaje odpowiednie obiekty.
  Argument 0:  Nazwa pliku
*/
var handle,linia,element0,element1,element2,element3,element4,top,left,ins_id,a;
handle = file_text_open_read(argument0);
while (!file_text_eof(handle))
{
linia = file_text_read_string(handle);
element0 = string_delete(linia,string_pos('@',linia),string_length(linia));
element1 = string_delete(linia,1,string_pos('@',linia));
element1 = string_delete(element1,string_pos('x',element1),string_length(element1));
element2 = string_delete(linia,1,string_pos('x',linia));
element2 = string_delete(element2,string_pos(':',element2),string_length(element2));
element3 = string_delete(linia,1,string_pos(':',linia));
element3 = string_delete(element3,string_pos('&',element3),string_length(element3));
element4 = string_delete(linia,1,string_pos('&',linia));
// Tworz obiekty
ins_id=instance_create(real(element1),real(element2),ds_list_find_value(global.o
bject,real(element0)));
// Dodawaj wspolrzedne tilesow do struktur
ds_list_add(global.objects,real(element0));
top = real(element4) * 32;
left = real(element3) * 32;
ds_list_add(global.tilesTop,top);
ds_list_add(global.tilesLeft,left);
ds_list_add(global.tilesX,real(element1));
ds_list_add(global.tilesY,real(element2));
ds_list_add(global.insid,ins_id);
a=real(element0);
if (a==0 || a==1 || a==2)
ds_list_add(global.tileid,tile_add(tile,left*32,top*32,32,32,real(element1),real
(element2),100));
else
ds_list_add(global.tileid,-1);
file_text_readln(handle);
}
file_text_close(handle);

Skrypt zapisujące dane do pliku:

/*
  Opis:        Skrypt zapisuje poziom do pliku.
  © Kryniak
  Argument 0:  Nazwa pliku
*/
var handle,obiekt,left,top,tilex,tiley,pozycja;
if (file_exists(argument0))
file_delete(argument0);
handle = file_text_open_append(argument0);
for (i=0;i<ds_list_size(global.objects);i+=1)
{
 obiekt = ds_list_find_value(global.objects,i);
 left = ds_list_find_value(global.tilesLeft,i)/32;
 top = ds_list_find_value(global.tilesTop,i)/32;
 tilex = ds_list_find_value(global.tilesX,i);
 tiley = ds_list_find_value(global.tilesY,i);
 file_text_write_string(handle,string(obiekt)+'@'+string(tilex)+'x'+string(tiley)+':'+string(left)+'&'+string(top));
 file_text_writeln(handle);
}
file_text_close(handle);

Skrypt na dodawanie tilesów do rooma:

var left,top,tilex,tiley,a;
tile_layer_delete(100);
global.drawed=0;
for (i=0;i<ds_list_size(global.tilesX);i+=1)
{
 a = ds_list_find_value(global.objects,i);
 left = ds_list_find_value(global.tilesLeft,i)*32;
 top = ds_list_find_value(global.tilesTop,i)*32;
 tilex = ds_list_find_value(global.tilesX,i);
 tiley = ds_list_find_value(global.tilesY,i);

 if (a==0 || a==1 || a==2) {
    tile_add(bck_tile,left,top+top/16,32,32,tilex,tiley,100); global.drawed+=1; }
}

 

I to by było na tyle :)

Musisz jeszcze zrobić jakiegoś leveldesignera ;P

 

Pozdrawiam

Kryniak

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...