Skocz do zawartości

Problem z background_replace i add


TO_mek

Rekomendowane odpowiedzi

Witam!

Mam następujący skrypt który powoduje ładowanie tła składającego się z 4 pasków zapisanych w postaci plików png których nazwy przechowuje tablica swiatlocien.

 

GML
//argument0 = nieuzywany

//argument1 = L/P - ktora czesc tla

korekta:=0;

if argument1 == 'P' then korekta:=room_width/2;

 

global.surfejs2:=surface_create(room_width/2, 800);

surface_set_target(global.surfejs2);

draw_clear_alpha(c_black, 0); //czyszczenie surfejsa

tlogm:=background0;

 

 

j:=0;

ip:=global.aktywne_pietro+1;

ik:=global.aktywne_pietro-2;

for (i=ip; i>=ik; i-=1) {

tlo:=working_directory+"\room\"+string(i)+string(global.swiatlocien[i,0])+string(global.swiatlocien[i,1])+string(global.swiatlocien[i,2])+".png";

background_replace(tlogm, tlo, 0, 1);

draw_background(tlogm,0-korekta,(j*213)+(j*17));

j+=1;

}

 

surface_reset_target();

if korekta <> 0 then { //PRAWE

background_index[1]:=background_create_from_surface(global.surfejs2,0,0,room_width/2, 800,0,1);

background_x[1]:=korekta;

background_visible[1]:=true;

background_y[1]:=((10-global.aktywne_pietro)*230)-12;

}

else { //LEWE

background_index[0]:=background_create_from_surface(global.surfejs2,0,0,room_width/2, 800,0,1)

background_y[0]:=((10-global.aktywne_pietro)*230)-12;

}

surface_free(global.surfejs2);

 

Zauważyłem, że w takiej formie każdorazowe wywołanie skryptu powoduje utworzenie dwóch nowych backgroundow w pamięci i zużycie kolejnych kilkunastu MB. Winne są te 2 linijki:

 

background_index[1]:=background_create_from_surface(global.surfejs2,0,0,room_wid

th/2, 800,0,1);

background_index[0]:=background_create_from_surface(global.surfejs2,0,0,room_wid

th/2, 800,0,1);

 

Wydaje mi się, że teoretycznie jak przypisuje tworzone tlo z surfejsa do istniejących indeksów to nie powinny być tworzone za każdym razem kolejne nowe a niestety tu po każdym wywołaniu skryptu mam 2 nowe.

Co jest nie tak?

Odnośnik do komentarza
Udostępnij na innych stronach

background_CREATE_from_surface powinno ci dać troche do myślenia

 

Edit:

polecam

GML
background_delete( background_index[0] );

background_delete( background_index[1] );

 

Już próbowałem dawać te komendy i efekt jest taki, że w następnym wywołaniu program krzyczy o to że te indeksy nie istnieją (zresztą prawidłowo). Dziwi mnie tylko to, że wywołanie: background_index[0]:=background_create_from_surface(global.surfejs2,0,0,room_wid

th/2, 800,0,1) tworzy KAŻDORAZOWO nowy indeks w pamięci.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
var _bck;

_bck := background_create_from_surface(global.surfejs2,0,0,room_width/2, 800,0,1);

background_index[1] := _bck;

background_delete( _bck );

No chyba nie.

GML
background_delete(background_index[1]);

background_index[1] = background_create_from_surface(global.surfejs2,0,0,room_width/2,800,0,1);

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