Skocz do zawartości

Instance_deactivate


Rekomendowane odpowiedzi

Witam, mam poważny problem, otóż w dużym roomie gry z dużą ilościa obiektów FPS gry spadał. Przeczytałem gdzieś odnośnie deaktywacji. Na początku sam ją wprowadziłem do gry i faktycznie było dobrze, ale potem się przyjrzałem i zobaczyłem że dekatywacja przebiega źle. Więc wywaliłem kod z obiektu i chciałem na pewnien czas zrezygnować z tej funkcji. Ale po wywaleniu kodów obiekty nadal się deaktywują. Dostałem od Pablo-GM kod na deaktywację wszystkiego, ale na popsutym już poprzednim kodem silniku zrobił się straszny burdel(inaczej tego nie da się określić) Przeciwnicy niby się deaktywują, ale kiedy ucieka taki za ekran to włazi w ściany(czego wcześniej nie robił) na meble itp. Kiedy jestem między jakimiś obiektami gra cyklicznie przyspiesza dwukrotnie. Zresztą sami zobaczcie:

Silnik gry

Za deaktywację odpowiada obj_controller

Obiekty są jako tako poukładane.

 

Mam prośbę, czy ktoś mógłby mi podać przyczynę tego bajzlu i pomóc mi go poskładać?

Za pomoc serdecznie dziękuję.

Odnośnik do komentarza
Udostępnij na innych stronach

Witam, mam poważny problem, otóż w dużym roomie gry z dużą ilościa obiektów FPS gry spadał. Przeczytałem gdzieś odnośnie deaktywacji. Na początku sam ją wprowadziłem do gry i faktycznie było dobrze, ale potem się przyjrzałem i zobaczyłem że dekatywacja przebiega źle. Więc wywaliłem kod z obiektu i chciałem na pewnien czas zrezygnować z tej funkcji. Ale po wywaleniu kodów obiekty nadal się deaktywują. Dostałem od Pablo-GM kod na deaktywację wszystkiego, ale na popsutym już poprzednim kodem silniku zrobił się straszny burdel(inaczej tego nie da się określić) Przeciwnicy niby się deaktywują, ale kiedy ucieka taki za ekran to włazi w ściany(czego wcześniej nie robił) na meble itp. Kiedy jestem między jakimiś obiektami gra cyklicznie przyspiesza dwukrotnie. Zresztą sami zobaczcie:

Silnik gry

Za deaktywację odpowiada obj_controller

Obiekty są jako tako poukładane.

 

Mam prośbę, czy ktoś mógłby mi podać przyczynę tego bajzlu i pomóc mi go poskładać?

Za pomoc serdecznie dziękuję.

 

A może używasz tej komendy deaktywacji i aktywacji obiektów nie tylko w obj_controller

Odnośnik do komentarza
Udostępnij na innych stronach

GML
instance_deactivate_region(view_xview[0]-1024,view_yview[0]-1024,view_wview[0]+1280,view_hview[0]+1280,0,1);

 

instance_activate_region(view_xview[0]-1024, view_yview[0]-1024, view_wview[0]+1280,view_hview[0]+1280,1);

 

instance_activate_object(Major_Reisman);

instance_activate_object(Kontrol);

instance_activate_object(obj_hud);

Mam taki kod na deaktywację ogólną regionu, a jak rozdzielić na konkretne obiekty, żeby parent_blok deaktywowalo dalej a parent_wrog blizej ?

Odnośnik do komentarza
Udostępnij na innych stronach

Mam taki kod na deaktywację ogólną regionu, a jak rozdzielić na konkretne obiekty, żeby parent_blok deaktywowalo dalej a parent_wrog blizej ?

 

 

Ja bym zrobił to tak:

Deaktywacja (instance_deactivate_region(left,top,width,height,inside,notme) przy inside=false)

1. Wyłączyć wszystko dla regionu mniejszego

2. Włączyć otoczenie

3. Wyłączyć wszystko dla regionu większego

3. Włączyć potrzebne obiekty (hud, Kontrol, Major) chociaż chyba Major i hud jest zawsze wewnątrz stref wiec i tak są aktywne.

 

 

Tylko tak się zastanawiam o co biega z tym wchodzeniem obiektów pod budynki. Przecież jak wszystko masz zdefiniowane prawidłowo to deaktywując obiekty są one nieaktywne i nie przesuwają się jak ich nie widać a przy aktywacji pojawiają się w miejscu ich wyłączenia. Jedyne logiczne wyjaśnienie to takie, że obiekty otoczenia są większe i są dłużej wyłączone niż obiekty wroga dlatego wróg wchodzi na miejsce gdzie jest dane drzewo czy budynek.

Przy okazji zobacz jak masz ustawione wysokość i szerokość (na 1280) a punkt początkowy (lewy, górny ustawiasz na -1024,-1024) więc zostaje ci margines z dołu i z prawej tylko 256 (różnica). Pamiętaj, że trzeci i czwarty parametr określa wysokość i szerokość a nie współrzędne punkt przeciwnego.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
view_xview[0]-256, view_yview[0]-256, view_xview[0] + view_wview[0]+256,view_yview[0] + view_hview[0]+256

tez nie tak

 

a tak:

GML
view_xview[0]-256, view_yview[0]-256, view_wview[0]+512, view_hview[0]+512

 

dopiero takie coś tworzy obszar wielkości widoku nr 0 + margines 256px wokoło. Pierwsze 2 parametry to umiejscowienie obszaru w uk.współrzędnych, kolejne 2 to wielkość samego obszaru (szerokość i wysokość). Może jeszcze prościej:

 

GML
margines:=256

view_xview[0]-margines, view_yview[0]-margines, view_wview[0]+(2*margines), view_hview[0]+(2*margines)

Odnośnik do komentarza
Udostępnij na innych stronach

@up mylisz się, dowód? > https://gmclan.org/up539_12_region.html strzałkami poruszaj kuleczkę.

czarna obwódka to view[ 0 ] a czerwona to jego margines. Na wszystko patrzy view[ 1 ] który jest większy od view[ 0 ] dlatego może zobaczyć co się dzieje.

 

EDIT: teraz wstaw sobie zamiast mojego czerwonego prostokąta twój:

GML
margines = 32;

draw_rectangle( view_xview[0]-margines, view_yview[0]-margines, view_wview[0]+(2*margines), view_hview[0]+(2*margines), 1 );

i zobacz co się z nim dzieje.

Dobra zwracam honor :P nie zauważyłem że instance_deactivate_regiony mają 2 i 3 argument szerokość i wysokość zamiast po prostu pozycję x2 y2.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Czemu dezaktywujesz region a nie obiekty ? może to jest powód? daj wszystkim przeciwnikom wspólnego ojca (nowy obiekt, bez akcji, bez sprite) i wtedy dezaktywując ten obiekt, dezaktywujesz też wszystkie potomne (można to też wykorzystać do kolizji, kolizja z ojcem zadziała też do wszystkich dzieci).

Drugiego ojca ustawiasz dla otoczenia (ściany, drzewa, podłogi, co tam chcesz).

Gracza głównego, ani obiektów jakkolwiek sterujących grą nigdy nie dezaktywujesz w ten sposób.

 

Edit:

 

GML
instance_deactivate_object(objTata);

instance_activate_region(...);

Odnośnik do komentarza
Udostępnij na innych stronach

no to mam parenty do obu typów obiektów

dla wrogów: "parent_wroga"

dla ścian itp: "parent_blok"

 

i to ma być tylko tak:

GML
instance_deactivate_object(parent_wroga);

instance_activate_region(view_xview[0]-256, view_yview[0]-256, view_wview[0]+512, view_hview[0]+512);

Dobrze ?

Odnośnik do komentarza
Udostępnij na innych stronach

GML
instance_deactivate_object(parentwroga);

instance_activate_region(view_xview[0]-256, view_yview[0]-256, view_wview[0]+512,view_hview[0]+512,1);

 

instance_deactivate_object(parent_blok);

instance_activate_region(view_xview[0]-456, view_yview[0]-456, view_wview[0]+612,view_hview[0]+612,1);

Dałem coś takiego.

Ale te łajzy nadal włażą na meble ściany itp. Czasami nawet przez nie przełażą.

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