TO_mek Opublikowano 11 Marca 2011 Udostępnij Opublikowano 11 Marca 2011 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 Więcej opcji udostępniania...
Mentoss Opublikowano 11 Marca 2011 Udostępnij Opublikowano 11 Marca 2011 background_CREATE_from_surface powinno ci dać troche do myślenia Edit: polecam GML background_delete( background_index[0] ); background_delete( background_index[1] ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 11 Marca 2011 Autor Udostępnij Opublikowano 11 Marca 2011 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 Więcej opcji udostępniania...
I am Lord Opublikowano 11 Marca 2011 Udostępnij Opublikowano 11 Marca 2011 background_index[] chyba nie tworzy uchwytu do pamięci na nowo powstałą grafikę. Spróbuj: 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 ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 12 Marca 2011 Udostępnij Opublikowano 12 Marca 2011 A takie małe pytanko... GML if korekta <> 0 then co daje Ci <> i czy działa ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MagnusArias Opublikowano 12 Marca 2011 Udostępnij Opublikowano 12 Marca 2011 Oznacza, że warunek jest spełniony, gdy liczba jest różna od zera. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 12 Marca 2011 Udostępnij Opublikowano 12 Marca 2011 Powinniście się już dawno nauczyć tego że da się w gmie pisać składnią pascala i składnią c skoro i tak większość z was je ze sobą miesza. <> to samo co != Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Shockah Opublikowano 12 Marca 2011 Udostępnij Opublikowano 12 Marca 2011 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 Więcej opcji udostępniania...
Mentoss Opublikowano 12 Marca 2011 Udostępnij Opublikowano 12 Marca 2011 albo GML var bck; bck=background_index[0]; background_index[0]=background_create_from_surface(); background_delete(bck); W ten sposób background_index[0] będzie przez cały czas coś zawierał. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę