Skocz do zawartości

Instance_deactivate i problemy


TO_mek

Rekomendowane odpowiedzi

Mam room 5000 x 5000 i view[0] 1024x768. Ekran jest podzielony na "piętra" o wysokości 250px (czyli na ekranie widać 3 piętra na raz), na każdym piętrze generowany jest na chwilę obecną jeden przeciwnik (docelowo dużo więcej obiektów). W celu optymalizacji chciałem zastosować coś takiego:

 

GML
instance_deactivate_region(0,view_yview[0],room_width,view_yview[0]+view_hview[0],false,true);//deaktywacja obiektow poza ekranem

instance_activate_region(0,view_yview[0],room_width,view_yview[0]+view_hview[0],true); //aktywacja obiektow wewnatrz ekranu</span>

 

czyli deaktywować obiekty poza viewem w pionie (w poziomie mają być aktywne bo cały czas chodzą tam i z powrotem) a aktywować te co są obecnie potrzebne. Po zmianie piętra (skok o 250px w górę/dół) następuje ponowne wywołanie powyższych dwóch linijek aby wyłączyć niepotrzebne obiekty z piętra które znika i załączyć następne z tego które się pojawiło.

 

No i dałem debugera, włączyłem podgląd obiektów i karpik bo coś nie działa i deaktywacja/aktywacja obiektów obejmuje równocześnie AŻ 7 pięter (jak dochodzę do strychu lub piwnicy to pozostaje dokładnie tyle obiektów (przeciwników) ile ma być czyli na chwilę obecną po 1 na piętro czyli 3).

 

Co jest nie tak z tymi procedurkami?

Testuje na GM8

 

 

EDIT:

Napisałem sobie dla pewności w drawie aktualne wartości tych obiektów:

 

GML
draw_text(view_xview[0]+180, view_yview[0]+420, "x1=0");

draw_text(view_xview[0]+180, view_yview[0]+440, "y1="+string(view_yview[0]));

draw_text(view_xview[0]+180, view_yview[0]+460, "x2="+string(room_width));

draw_text(view_xview[0]+180, view_yview[0]+480, "y2="+string(view_yview[0]+view_hview[0]));

 

for (i=0; i<instance_count; i+=1)

{

draw_text(view_xview[0]+180, view_yview[0]+500+(20*i), "x="+string(instance_id.x) + " y="+string(instance_id.y) + " id="+string(instance_id));

}

 

No i obiekty nadmiarowe mają wartości Y z poza zakresu więc nie pownno ich być a są.

Niby cośtam jest deaktywowane na odleglejszych piętrach (zakres 7 pieter a nie tak jak powinno być 3) ale jak dla mnie to zbyt losowo to działa żeby tak to zostawić. Macie jakieś pomysły?

Odnośnik do komentarza
Udostępnij na innych stronach

instance_deactivate_regiony() jako 3 i 4 argument przyjmują nie "x2, y2" a "width, height", czyli zamiast "room_width,view_yview[0]+view_hview[0]" daj "view_wport[0], view_hport[0]".

 

 

Ok. W moim przypadku 5000, view_hport[0] bo potrzebuje miec aktywne obiekty na calej szerokosci rooma na danym pietrze a nie tylko widoczne. Ale teraz dziala ok.

 

Jeszcze pytanko. Czy deaktywacja a pózniej aktywacja w tym samym kroku powoduje jakieś opóznienie? Chodzi mi o to ze na samym dole mam stały panel o wys. 60px który jest wyświetlany przez drugi widok (lewy dolny rog ekranu 1024x60) i na nim są obiekty które nie powinny znikać. Jeśli hero jest na wyższych piętrach to te obiekty znikają wywołując powyższą komendę więc muszę je ponownie aktywować dla regionu 0,4940,1024,60. Czy ma to wpływ na prędkość działania (są one najpierw wygaszane a później ponownie rysowane czy jak)? W sumie po to deaktuwuję obiekty aby przyspieszyć grę a nie żeby jeszcze ją niepotrzebnie obciążać ale potrzebuję dla tych obiektów w lewym dolnym rogu rooma robić wyjątek bo one tam muszą zawsze być.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ale możesz np. dezaktywować jeden typ obiektów. Ja zrobiłbym tak, że wszystkim obiektom które mogą być dezaktywowane, daję wspólnego rodzinca - i wtedy tylko tego rodzica dezaktywuję - to nic, że na mapie nie będzie tego obiektu tak naprawdę, dezaktywacja złapie też wszystkie dzieci. Np. w Almorze wszystko jest jednym obiektem :P

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