Skocz do zawartości

Dezaktywacja obiektów poza viewem


alwin

Rekomendowane odpowiedzi

Naprawdę sporo się zyskuje na dezaktywacji obiektów poza 'kamerą', wydajność znacznie wzrasta. Ale nie mogę usuwać wszystkich ponieważ np- kiedy zaznaczę jednostkę, zjadę z niej wievew to już prpgram 'mysli' że nie mam nic zaznaczonego i nie pozwoli mi uruchomic akcji odpowiedzialnych za poruszanie kiedy kliknę:/

 

Miałem taki kod w stepie obj_kontrol

 

GML
instance_activate_all();

instance_deactivate_region(view_xview[0],view_yview[0],view_wview[0],view_hview[0],false,true);

 

A moje pytanie- jak dezaktywować np obiekty poza viewem tylko jakiegos typu? Np. drzewa i inne pierdoły.. A jednostki zostawię w spokoju raczej. Choc to one pożerają wydajność..

Odnośnik do komentarza
Udostępnij na innych stronach

Jesli chcesz zeby jakies obiekty byly zawsze aktywne dopisz po prostu pod tym

GML
instance_activate_object(jednostki);

i zostawi je w spokoju. Tak wlasnie mozesz sobie zostawic obiekty odpowiedzialne za rozne hudy itp

Odnośnik do komentarza
Udostępnij na innych stronach

No racja...

Kurde i tak o kant dupy. Mam obiekty-

Drzewa,Kopalnia,Pracownicy,Piechurzy,Łucznicy,Pałac. I nic z tego nie mogę usuwać.. pracownicy zbierają drzewo- jak zejde kamerą, drzewa znikaja to pracownicy szukają tych najblizszych i szukają po całej mapie:/ Ehh i to taki mały przykładzik, jednak nic z tego pomysłu nie będzie..

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if x>view_xview && y>view_yview && x<view_xview+room_height && x>view_xview+room_width

{draw_sprite(image_index/*coś tam coś tam nie pamietam*/}

 

edit::mam:

GML
draw_sprite_ext( sprite_index, image_index, x, y, image_xscale, image_yscale, image_angle, image_blend, image_alpha );
Odnośnik do komentarza
Udostępnij na innych stronach

Myślisz że to coś da? To proste sprity.. ale warto spróbować w sumie, nic nie zaszkodzi.

 

GML
if(x>view_xview[0]+640){ ??? }

Gdy obiekt będzie poza prawą stroną viewa- usuń sprita? Dobrze kombinuję?

 

E: no właśnie tylko jak usunąć sprita?

Odnośnik do komentarza
Udostępnij na innych stronach

Ha ha jednak się zawziąłem i zrobię bardziej wydajny mój silnik:)

Jak wyzej mówiłem , dezaktywacja jakiejś jednostki która wykonuje czynności nie ma sensu więc-

 

GML
with (obj_jednostka_pracownik)

{

if(x>view_xview[0]+40)&&(x<view_xview[0]+600)&&(y>view_yview[0]+40)&&(y<view_yview[0]+440)// w kamerze

{

instance_activate_object(self) // aktywuj

} else { //poza kamera

if(ruch)||(pracuje)||(wali_drzewo)||(niesie_zloto)||(niesie_drzewo) // jezeli wykonuje te czynnosci

{

instance_activate_object(self) // dalej pozaostaw aktywne

} else { // jezeli sie leni, nic nie robi

instance_deactivate_object(self) // dezaktywuj

}

 

}

 

}

 

Ładnie działa poza jednym. Jeżeli się dezaktywuje - to po powroci viewa już nie ma tego obiektu- nie aktywuje się na nowo. tak sobie myslę ze nie może się aktywować bo nie istnieje- więc i te akcje sie nie wykonują odpowiedzialne za aktywację.. jak to ominąć?

 

 

Edycja: Dopisałem linijkę

GML
instance_activate_region(view_xview[0]+40,view_yview[0]+40,view_wview[0],view_hview[0],true)

i śmiga aż miło:)

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