TO_mek Opublikowano 16 Stycznia 2011 Udostępnij Opublikowano 16 Stycznia 2011 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 Więcej opcji udostępniania...
Dawidds Opublikowano 17 Stycznia 2011 Udostępnij Opublikowano 17 Stycznia 2011 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]". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 17 Stycznia 2011 Autor Udostępnij Opublikowano 17 Stycznia 2011 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 17 Stycznia 2011 Administratorzy Udostępnij Opublikowano 17 Stycznia 2011 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 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ę