Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

witam

mam problem zapewne częsty przy tworzeniu w gm sorrka jeżeli uznacie to za zbyt mało zaawansowane pytanie to serdecznie przepraszam i moderatora proszę o przeniesienie

 

a więc mam rooma 10400 na 12000 wypełnionego obiektami o rozmiarze 64 na 64 i co tu dużo mówić tnie się że grać się nie da

Macie jakieś wypróbowane pomysły na zoptymalizowanie gry ??

Opublikowano

a próbowałeś deaktywować obiekty?

 

instance_deactivate_all(notme);
instance_deactivate_object(obj);
instance_deactivate_region(left,top,width,height,inside,notme);

instance_activate_all();
instance_activate_object(obj);
instance_activate_region(left,top,width,height,inside);

 

Więcej w helpie pod hasłem: "Deactivating instances".

 

Możesz te instancje które są poza ekranem deaktywować. Wtedy one "tak jakby" nie istnieją - tzn. nie są wykonywane żadne zdarzenia, i nie można się do nich odwoływać. Osobiście jeszcze tego nie próbowałem, ale może to nieco odciążyć grę.

Opublikowano

hej a mam takie small pytanie :P jak np chce by mi sie aktywowały tylko obiekty ktore są na widoku to jak? (bez uzycia tej z region). No przeciez skąd gra ma wiedziec czy dany obiekt jest w moim widoku skoro po dezaktywacji nie zna jego x i y? Mam wszystko do zmiennych zapisywac xD? xD

Opublikowano

Chyba nie rozumiesz jak działa ten system w GM. Obiekty dalej istnieją, ale dostęp do ich zmiennych jest niemożliwy oraz wykonywanie eventów wstrzymane - co pozwala odzyskać część fpsów. Obiekt dalej "znajduje" się w pamięci i dostęp do niego jest możliwy z innego poziomu niż sam GML. :P

Opublikowano
jak np chce by mi sie aktywowały tylko obiekty ktore są na widoku to jak?

Ja bym podczas uruchomienia room'a, deaktywował wszystkie instancje, a linijkę kodu niżej aktywował region, o rozmiarach i pozycji widoku.

 

Albo odwrotnie, jak proponuje pan Marek:

 

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

 

(bez uzycia tej z region)

Bez tej funkcji to się chyba nie da.

Opublikowano

A czy da się zrobić żeby tylko wyznaczone przezemnie obiekty się dezaktywowały w wyznaczonym regionie.

A nie każde. Bo wtedy przeciwnicy też znikną i pojawią sie tylko wtedy gdy będzie on na kamerze.

Opublikowano

No to instance_deactivate_object(obj) jeśli o to chodzi... Albo może jakaś inna funkcja jest na to, teraz niestety nie pamiętam ;/

 

@Modnar<numerki, ale taki Smart Newbie xD>: Jak Marek oO...? Jak już to Mark xD

Opublikowano

To proste: if x > view_wview or x < view_xview or y > view_hview or y < view_yview { instance_deactivate_object(obj) }; Proste xD

Opublikowano
To proste: if x > view_wview or x < view_xview or y > view_hview or y < view_yview { instance_deactivate_object(obj) }; Proste xD

ten sposób nie działa

 

a pro po dzięki funkcji instance_deactivate mogę lepiej sprecyzować pytanie

po naciśnięciu f1 w gm znalazłem przykład i wszystko było by cacy gdyby mi jednak wszystkiego nie wyłączał

 

a więc moje sprecyzowane pytanko to

 

mam sobie obiekt nazwijmy go land

do tego landu mam inne obiekty przypisane jako parent i chciałbym żeby tylko na te które mają parent do obiektu land były z dezaktywowane mniej więcej coś takiego jak na górze byle by działało sam prubuje coś wykombinować ale mi coś nie wychodzi ^^

Opublikowano

Jeśli chodzi o deaktywację instancji dziedziczących z obiektu land, to wystarczy coś takiego:

 

var p;

with(all)
{ 
  p = object_get_parent(object_index);
  
  if(p == land)
    instance_deactivate_object(object_index);     
}

Żeby to jeszcze uzależnić od tego, czy instancja jest w widoku, to trzeba rozbudować nieco warunek. Mnie się to narazie nie udało.

 

 

To proste: if x > view_wview or x < view_xview or y > view_hview or y < view_yview { instance_deactivate_object(obj) }; Proste xD

Jeżeli już, to tak:

 

if((x > view_xview && x < (view_xview + view_wview)) and (y > view_yview && y < (view_yview + view_hview)))

  • 1 miesiąc temu...
Opublikowano

Witam wiem że odświeżam stary temat ale sam go założyłem więc wiecie XP

 

wreszcie udało mi się uzyskać to co chciałem czyli dezaktywowanie tylko tych obiektów które chcemy i chciałem się tym z wami podzielić bo mam nadzieje że nie jednemu on się przyda zwłaszcza twórcom gier 3d którzy potrzebują robić jak najwydajniejsze gry by się nie cięły a jeśli można to moderatora prosił bym o umieszczenie tego przykładu w dziale z przykładami na gmclanie no chyba że tam już taki jest a się opisałem a wy tu pewnie czekacie na link oto on ^^

 

>>Download<<//Link 2 posty niżej XP

Opublikowano

A jednak moja radości była przed wczesna >3 i z powrotem do programowania

 

Edit:

No mam nadzieję że teraz jest już dobrze ^^ w każdym razie przetestowałem na gierce 3d i wszystko chodziło ok.

 

>>Download<<//Link 2 posty niżej XP

Opublikowano

Dalej to samo. Uruchamiaj grę w debugerze, tam masz podane ile obiektów jest aktywnych. =)

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...