Skocz do zawartości

Wydajność gry levele


Kewin
Przejdź do rozwiązania Rozwiązane przez I am Lord,

Rekomendowane odpowiedzi

Robię grę z dużą liczbą leveli. Mam problem z wydajnością. Wszystko jest dobrze dopóki nie zostawi sie włączonej gry na np minute, gra zaczyna strasznie zacinać a zrobienie czegokolwiek staje sie niemożliwe. Odczyty z debuggera zaczynają spadac i zagęszczają się występuje to tylko wtedy jeśli gre zostawi sie na jakis czas. Jeśli gra sie w nia caly czas wszystko chodzi płynnie. Nie mam pojęcia dlaczego sie tak dzieje proszę o pomoc bo męczę sie juz z tym czwarty dzień.

Odnośnik do komentarza
Udostępnij na innych stronach

if global.ulepszenie = 49
{
draw_sprite_ext(spr_ulepszenie_9, 0, x, y, 0.2, 0.2, 0, 0, 0)
instance_create_layer(x,y+400,"Instances", obj_ulepszenie_9);
draw_text_color(x-250, y-100, "Upgrade level cost: 69", c_aqua, c_aqua, c_aqua, c_aqua, 1);
instance_deactivate_object(obj_ulepszenie_8);
}


if global.ulepszenie = 50
{
draw_sprite_ext(spr_ulepszenie_10, 0, x, y, 0.2, 0.2, 0, 0, 0)
instance_create_layer(x,y+400,"Instances", obj_ulepszenie_10);
draw_text_color(x-250, y-100, "Upgrade level cost: 70", c_aqua, c_aqua, c_aqua, c_aqua, 1);
instance_deactivate_object(obj_ulepszenie_9);
}

tutaj jest kod przykładowy

Odnośnik do komentarza
Udostępnij na innych stronach

Nie bardzo rozumiem kontekstu z jakiego obiektu wyciągasz ten "przykładowy kod", więc niewiele można z tego wywnioskować, ale mimo to jedna rzecz mnie niepokoi. Czy przypadkiem tego kodu:

Godzinę temu, Kewin napisał:

if global.ulepszenie = 49
{
draw_sprite_ext(spr_ulepszenie_9, 0, x, y, 0.2, 0.2, 0, 0, 0)
instance_create_layer(x,y+400,"Instances", obj_ulepszenie_9);
draw_text_color(x-250, y-100, "Upgrade level cost: 69", c_aqua, c_aqua, c_aqua, c_aqua, 1);
instance_deactivate_object(obj_ulepszenie_8);
}
// ... podobny kod

 

nie używasz w zdarzeniu Draw? Jeżeli tak, to prawdopodobnie instancjonujesz obiekty obj_ulepszenie_9/10 itd. w pętli, przez co tworzysz kolejne instancje tego samego obiektu zapychając pamięć i main loopa obsługując inne zdarzenia z tych obiektów. Jeszcze dodam, że funkcja instance_deactivate_object dezaktywuje obiekt, ale go nie zwalnia z pamięci, a to problemu nie rozwiązuje.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Rozwiązanie

Wstaw na końcu Draw 

show_debug_message( string(instance_number(obj_ulepszenie_9))+", "+string(instance_number(obj_ulepszenie_10)) );

 

I zobacz w konsoli Output czy liczby się będą zwiększać. Jeżeli tak to znaczy że nonstop tworzysz te obiekty, w nieskończoność.

 

Instancje obiektu usuwa się za pomocą instance_destroy()

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

W sumie to dziwne, że debugger nie ma licznika instancji... jest tylko tab z ich listą, ale żeby zauważyć ich nadmiar trzeba by zwrócić uwagę na malejący scrollbar co w tym przypadku pewnie byłoby trudne, bo za szybko się tworzą i od razu scrollbar jest najmniejszy z możliwych ;)

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