Skocz do zawartości

Przyspieszenie animacji w grze Aktywowanie i dezaktywowanie obiektów po za view


Milord

Rekomendowane odpowiedzi

Mam view 800x500

sceneria moja w grze to background na ,który nakładam solidy(wiadomo tak szybciej też gra działa)

mam już trochę obiektów na planszy i przyjdzie taki moment,że zacznie zwalniać..

Przyglądałem się już na forum temu tematowi aktywacja i dezaktywacja obiektów po za view,no,ale wole się upewnić,czy dobrze to robię..

 

domyślam się,że wklejam ten kod do stepu gracza? czy begin lub end step gracza?

co jak się ma respawn wroga,czy to też uwzględniać do wyjątków? czy nie trzeba

 

GML
instance_activate_all();

instance_deactivate_region(view_xview[0],view_yview[0],// czy tu podaje wartości poziome i pionowe podglądu gry?

view_wview[0],view_hview[0],false,true); // tu robię to samo co wyżej?

instance_activate_object(WYJĄTEK);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały

Odnośnik do komentarza
Udostępnij na innych stronach

GML
instance_activate_all();

instance_deactivate_region(view_xview[0],view_yview[0],// początek regionu, w ktorym dezaktywujesz obiekty

view_wview[0],view_hview[0],false,true); // dlugosc i wysokosc regionu

instance_activate_object(WYJĄTEK);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały</span>

Chodź po 1. radziłbym trochę rozszerzyć, na wszelki wypadek

GML
instance_deactivate_region(view_xview[0]-margines,view_yview[0]-margines,// początek regionu, w ktorym dezaktywujesz obiekty

view_wview[0]+margines,view_hview[0]+margines,false,true); // dlugosc i wysokosc regionu

instance_activate_object(WYJĄTEK);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały</span>

 

I lepiej podziel sobie na obiekty dynamiczne(te poruszające się np. npc-ty) i statyczne(np. ściana). Bo inaczej możesz mieć bugi, że npc npc-t wejdzie w ścianę(która jeszcze dezaktywowana nie będzie). Wtedy dynamicznym daj większy margines.

 

Musisz dać to w jakiś obiekt, może być gracz. Step, begin itp. to raczej dużego znaczenia nie ma, chodź w specyficznych sytuacjach możesz musieć to zmienić zależnie od swojego kodu. Chociaż jeżeli masz kod np. w step zawsze, to danie w begin może trochę zmniejszyć ryzyko bugów, ale jeżeli stosujesz osobną dezaktywację dynamicznych i statycznych obiektów to nie musisz się raczej o to martwić ;)

 

Respawn? To zależy, bo jeżeli mają się zawsze respawnować, to może być problem z dezaktywacją w ogóle. Jeżeli mają tylko w pobliżu gracza to tak, dezaktywuj.

Odnośnik do komentarza
Udostępnij na innych stronach

GMLinstance_activate_all();

instance_deactivate_region(view_xview[0],view_yview[0],// początek regionu, w ktorym dezaktywujesz obiekty

view_wview[0],view_hview[0],false,true); // dlugosc i wysokosc regionu

instance_activate_object(WYJĄTEK);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały

Chodź po 1. radziłbym trochę rozszerzyć, na wszelki wypadek

GMLinstance_deactivate_region(view_xview[0]-margines,view_yview[0]-margines,// początek regionu, w ktorym dezaktywujesz obiekty

view_wview[0]+margines,view_hview[0]+margines,false,true); // dlugosc i wysokosc regionu

instance_activate_object(WYJĄTEK);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały

 

I lepiej podziel sobie na obiekty dynamiczne(te poruszające się np. npc-ty) i statyczne(np. ściana). Bo inaczej możesz mieć bugi, że npc npc-t wejdzie w ścianę(która jeszcze dezaktywowana nie będzie). Wtedy dynamicznym daj większy margines.

 

Musisz dać to w jakiś obiekt, może być gracz. Step, begin itp. to raczej dużego znaczenia nie ma, chodź w specyficznych sytuacjach możesz musieć to zmienić zależnie od swojego kodu. Chociaż jeżeli masz kod np. w step zawsze, to danie w begin może trochę zmniejszyć ryzyko bugów, ale jeżeli stosujesz osobną dezaktywację dynamicznych i statycznych obiektów to nie musisz się raczej o to martwić ;)

 

Respawn? To zależy, bo jeżeli mają się zawsze respawnować, to może być problem z dezaktywacją w ogóle. Jeżeli mają tylko w pobliżu gracza to tak, dezaktywuj.

 

MaxGaming zrobiłem tak kod dałem w begin step gracza

 

 

 

GML
//optymalizacja kodu gry

instance_activate_all();

instance_deactivate_region(view_xview[0]-300,view_yview[0]-400,// początek regionu, w ktorym dezaktywujesz obiekty,ale chyba trzeba dać na + marginesy,bo dezaktytwuje wszystko co jest przede mną,a nie za mną

view_wview[0]+800,view_hview[0]+500,false,true); // dlugosc i wysokosc regionu ,tu chodzi o moje parametry view podgladu pokoju?

instance_activate_object(obj_game_controller);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały</span>

instance_activate_object(obj_room_controller);

instance_activate_object(obj_global_controller);

instance_activate_object(par_solid);

instance_activate_object(par_solid_ghost);

 

 

dałem wyżej instance_activate_all(); ale nie wiem,czy tak ma być,bo bez tego jak nie dam,to jak idę graczem do przodu,to wszystkie obiekty,które są przede mną zniknęły;) oczywiście poza tymi co dodałem do wyjątku..

Odnośnik do komentarza
Udostępnij na innych stronach

@Cygnus: Zazwyczaj to jest rozmiar view + margines jakiś tam.

 

@Milord: Nie do końca. Marginesy robi się tylko dla pewności, np jakby jakieś obiekty były duże i by niby były dezaktyowane a nie powinny i mamy wtedy bugi itp.. To dużo zależy jak zbudowana jest nasza gra, ale raczej aż tak duże nie są potrzebne(czym większe tym większe obciążenie PC).

instance_activate_all(); - aktywuje wszystkie obiekty, bo te nie aktywują się same co step ;) Taki efekt otrzymałeś bo dezaktywowałeś obiekty przed sobą a ich z powrotem nie aktywowałeś. Aha i jak w grze np chodzi się tylko w prawo to można dezaktywować wszystkie obiekty od lewej(bez marginesu)... Ale mówię to zależy wszystko od konstrukcji gry. Może poczytaj sobie więcej bardziej jak to działa, żeby więcej teorii mieć, bo o złotą metodę pasującą do każdego projektu tutaj ciężko :)

Odnośnik do komentarza
Udostępnij na innych stronach

@Cygnus: Zazwyczaj to jest rozmiar view + margines jakiś tam.

 

@Milord: Nie do końca. Marginesy robi się tylko dla pewności, np jakby jakieś obiekty były duże i by niby były dezaktyowane a nie powinny i mamy wtedy bugi itp.. To dużo zależy jak zbudowana jest nasza gra, ale raczej aż tak duże nie są potrzebne(czym większe tym większe obciążenie PC).

instance_activate_all(); - aktywuje wszystkie obiekty, bo te nie aktywują się same co step ;) Taki efekt otrzymałeś bo dezaktywowałeś obiekty przed sobą a ich z powrotem nie aktywowałeś. Aha i jak w grze np chodzi się tylko w prawo to można dezaktywować wszystkie obiekty od lewej(zacząć nie od view_xview, a od 0)... Ale mówię to zależy wszystko od konstrukcji gry. Może poczytaj sobie więcej bardziej jak to działa, żeby więcej teorii mieć, bo o złotą metodę pasującą do każdego projektu tutaj ciężko :)

 

 

Max gaming;)

to gra platformowa chodzi się w prawo;) ale można się cofać;) ale tylko w danej planszy;)

Bardziej mi chodzi o efekt,że chce tak żeby wszystko co jest w podglądzie moim view okienku było aktywne,a po za nim już nie aktywne,o to mi dokładnie chodzi ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Max gaming;)

to gra platformowa chodzi się w prawo;) ale można się cofać;) ale tylko w danej planszy;)

Bardziej mi chodzi o efekt,że chce tak żeby wszystko co jest w podglądzie moim view okienku było aktywne,a po za nim już nie aktywne,o to mi dokładnie chodzi ;)

No to mniej więcej tak jak piszesz, tylko jednak margines, aż tak duży być nie musi. Jeżeli nie masz zbyt długich obiektów to raczej margines duży być nie musi, jednak niewielki jednak bym dał dla pewności ;)

 

A ponowna aktywacja musi być, bo inaczej raz zdezaktywowany obiekt, permanentnie by był już nie aktywny ;)

Odnośnik do komentarza
Udostępnij na innych stronach

No to mniej więcej tak jak piszesz, tylko jednak margines, aż tak duży być nie musi. Jeżeli nie masz zbyt długich obiektów to raczej margines duży być nie musi, jednak niewielki jednak bym dał dla pewności ;)

 

A ponowna aktywacja musi być, bo inaczej raz zdezaktywowany obiekt, permanentnie by był już nie aktywny ;)

 

zobacz coś takiego;D?

chce tylko żeby view mój był aktywny co ma wymiary podglądu 800x500 szeroki 800 wysoki na 500..reszta za nim ma być nieaktywna...dodałem wyjątki,ale hmmm czy to jest dobre

mają być nieaktywne,a jak znajdą się w moim podglądzie nie daleko ,to mają się aktywować ot coś takiego.

 

 

GML
//optymalizacja kodu gry

instance_activate_all();

instance_deactivate_region(view_xview[0],view_yview[0],// tu nie dałem marginesu..czyli teraz,wszystko z lewej strony powinno się dezaktwować,jak nie jest w zasięgu mojego podglądu.

view_wview[0]+800,view_hview[0]+500,false,true); // dlugosc i wysokosc regionu

instance_activate_object(obj_game_controller);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały</span>

instance_activate_object(obj_room_controller);

instance_activate_object(obj_global_controller);

instance_activate_object(par_solid);

instance_activate_object(par_solid_ghost);

Odnośnik do komentarza
Udostępnij na innych stronach

No zależy ile jeszcze tych solidów jest, bo może jednak warto by było..

 

Ale ogółem powinno być ok, jeżeli coś Ci buguje to wtedy zmieniaj ;)

Aczkolwiek bym zmniejszył ten z prawej i u dołu margines. Ciekawi mnie też czemu u góry marginesu nie ma, a u dołu jest, tak miało być?

Odnośnik do komentarza
Udostępnij na innych stronach

No zależy ile jeszcze tych solidów jest, bo może jednak warto by było..

 

Ale ogółem powinno być ok, jeżeli coś Ci buguje to wtedy zmieniaj ;)

Aczkolwiek bym zmniejszył ten z prawej i u dołu margines. Ciekawi mnie też czemu u góry marginesu nie ma, a u dołu jest, tak miało być?

 

No nic nie buguje Maxgaming;) hmmm chodzi ci dlaczego mam margines +800 ;)?

 

bo w view w grze ustawiłem sobie 800x500 czyli mały kawałek scenerii;) z całości;) i ta część ma być nietykalna;) i każda za nią ma się dezaktywować i przed nią też może,ale jak się znajde w jej zasiegu,to ma się aktywować i tyle;)

Odnośnik do komentarza
Udostępnij na innych stronach

Ale za wielkość viewa odpowida już view_width i height ;) Margines to dodatkowy obszar przeciw bugom.

Marignes np. ustal na 32, czy 64px, chyba że wymaga więcej... a możesz i bez, ale panuje taka zasada, że dla bezpieczeństwa się zostawia jakiś margines.

 

A chodzi mi o to, że pierwsze 4 argumenty to x, y, szerokość, długość. Odjęcie od x to margines z lewej, odjęcie od y to margines od góry, zwiększenie szerokości to margines z prawej, a zwiększenie wysokości dolny margines. Zrobiłeś margines z prawej i u dołu, a z lewej i u góry nie. Z lewej to jeszcze logiczne skoro nie da się w lewo chodzić, ale czemu u dołu jest, a u góry nie ma? To celowy zabieg, czy po prostu źle mnie zrozumiłeś?

Odnośnik do komentarza
Udostępnij na innych stronach

Ale za wielkość viewa odpowida już view_width i height ;) Margines to dodatkowy obszar przeciw bugom.

Marignes np. ustal na 32, czy 64px, chyba że wymaga więcej... a możesz i bez, ale panuje taka zasada, że dla bezpieczeństwa się zostawia jakiś margines.

 

A chodzi mi o to, że pierwsze 4 argumenty to x, y, szerokość, długość. Odjęcie od x to margines z lewej, odjęcie od y to margines od góry, zwiększenie szerokości to margines z prawej, a zwiększenie wysokości dolny margines. Zrobiłeś margines z prawej i u dołu, a z lewej i u góry nie. Z lewej to jeszcze logiczne skoro nie da się w lewo chodzić, ale czemu u dołu jest, a u góry nie ma? To celowy zabieg, czy po prostu źle mnie zrozumiłeś?

 

 

 

 

Po prostu źle Cię zrozumiałem;)

czyli daje margines tak:

 

Begin step gracza

GML
//optymalizacja kodu gry

instance_activate_all();

instance_deactivate_region(view_xview[64],view_yview[64],// początek regionu, w ktorym dezaktywujesz obiekty

view_wview[0]+64,view_hview[0]+64,false,true); // dlugosc i wysokosc regionu

instance_activate_object(obj_game_controller);// tu dodaje rozumiem wyjątki w grze,które chce żeby się nie dezaktywowały</span>

instance_activate_object(obj_room_controller);

instance_activate_object(obj_global_controller);

instance_activate_object(par_solid);

instance_activate_object(par_solid_ghost);

instance_activate_object(obj_napis_plansz);

instance_activate_object(obj_fade);

instance_activate_object(obj_przejscie7);

instance_activate_object(obj_energia);

instance_activate_object(obj_spawn_bulwa);

instance_activate_object(obj_spawn);

instance_activate_object(obj_spawn_gerwazy);

instance_activate_object(obj_spawn_rysiu);

instance_activate_object(obj_spawn_rysiu_chodzi);

instance_activate_object(obj_spawn_dino);

instance_activate_object(obj_spawn_bandyta);

instance_activate_object(obj_enemy_smoczek);

instance_activate_object(par_hazard);

instance_activate_object(obj_spadajace_kolce);

 

 

Ktoś mi może powiedzieć co jest nie tak...ogólnie wszystko dobrze działa...ale teraz jak znajdę się,czy to na samym początku planszy lub na samym końcu planszy,to jednorazowo tylko raz wyświetla się przez ułamek sekundy kawałek poprzedniej planszy z poprzedniego roomu..

O co z tym chodzi? jak się tego pozbyć?

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

GML
//optymalizacja kodu gry

instance_activate_all();

instance_deactivate_region(view_xview[0]-64,view_yview[0]-64,// początek regionu, w ktorym dezaktywujesz obiekty

view_wview[0]+64,view_hview[0]+64,false,true); // dlugosc i wysokosc regionu

instance_activate_object(obj_game_controller);

W nawiasach kwadratowych podajesz numer viewa, nie wiem czemu wpisłeś tam 64 zamiast 0. Musisz po prostu odjąć margines, a 0 w nawiasie kwadratowym pozostawiasz w spokoju :P

Ogółem ok, tylko czy np. nie zespawnuje się gracz w aktywnym spawnie(bo wyjątek) w nie aktywnym regionie? Chodzi o to by np. nie zespawnowalo go w innym obiekcie który aktualnie jest nie aktywny. Przeanalizuj kod spawnu, czy jest przygotowany na taką ewentualność ;) Bo to czy może tak zostać zależy od tego jak wygląda fizyka i spawnienie. Tak poza tym naczęściej w platformówkach solidów jest najwięcej. Nie wiem jak jest u Ciebie, ale pomyśl czy na pewno chcesz je wykluczyć z dezaktywacji?

Odnośnik do komentarza
Udostępnij na innych stronach

GML//optymalizacja kodu gry

instance_activate_all();

instance_deactivate_region(view_xview[0]-64,view_yview[0]-64,// początek regionu, w ktorym dezaktywujesz obiekty

view_wview[0]+64,view_hview[0]+64,false,true); // dlugosc i wysokosc regionu

instance_activate_object(obj_game_controller);

W nawiasach kwadratowych podajesz numer viewa, nie wiem czemu wpisłeś tam 64 zamiast 0. Musisz po prostu odjąć margines, a 0 w nawiasie kwadratowym pozostawiasz w spokoju :P

Ogółem ok, tylko czy np. nie zespawnuje się gracz w aktywnym spawnie(bo wyjątek) w nie aktywnym regionie? Chodzi o to by np. nie zespawnowalo go w innym obiekcie który aktualnie jest nie aktywny. Przeanalizuj kod spawnu, czy jest przygotowany na taką ewentualność ;) Bo to czy może tak zostać zależy od tego jak wygląda fizyka i spawnienie. Tak poza tym naczęściej w platformówkach solidów jest najwięcej. Nie wiem jak jest u Ciebie, ale pomyśl czy na pewno chcesz je wykluczyć z dezaktywacji?

 

Dzięki teraz już rozumiem z tym view;) kurcze,bo zakręciłem się na maksa;)

z spawn jest wszystko w porządku sprawdzałem..co do solidów,no to jak ci pisałem mam scenerie zbudowaną jako jedną całość...i na nią nałożony jeden niewidzialny solid w małych różnych kawałkach;)

działa bardzo ładnie teraz;) kurcze,aż w szoku jestem;)

 

Dzięki jeszcze raz;)

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