Skocz do zawartości

Jak dobrze zoptymalizować grę (2D)?


Mucco

Rekomendowane odpowiedzi

Od dłuższego już czasu tworzę shootera 2D o dużej mapie (chciałem zmieścić miasto, wieś i las w jednym). Jest również wiele bajerków, obiektów - ludzi, samochodów, drzew... Gra dosyć często muli (a co dopiero jak dojdzie lepsza grafa...). Mam więc pytanie - jak to dobrze zoptymalizować?

 

Chodzi mi o nie tylko optymalizację kodu, ale również już skompilowanej gry (wyciąganie niepotrzebnych pierdół). Bardzo mi zależy na szybkim działaniu gry i będę wdzięczny za pomoc ;)

Odnośnik do komentarza
Udostępnij na innych stronach

hmm odpowiednie wszytywanie zasobów z zewnątrz, deaktywacja niepotrzebnych obiektów od groma już było takich tematów..

Nie widze żadnych przeszkód, by powstał jeszcze jeden :sleep1:

 

instance_deactivate_object(drzewko);

instance_deactivate_object(samochodzik);

instance_deactivate_object(ludzik);

//te 3 obiekty sa dezaktywowane, jesli znajda sie poza room'em

instance_activate_region(view_xview,view_yview,view_wview,view_hview,true);

 

 

Czarno na białym. ;d

Nie da się prościej? Załóżmy, by każdy obiekt był dezaktywowany automatycznie?

 

Ps.

jesli znajda sie poza room'em

A nie poza viewem? :jezor:

Odnośnik do komentarza
Udostępnij na innych stronach

instance_deactivate_object(drzewko);

instance_deactivate_object(samochodzik);

instance_deactivate_object(ludzik);

//te 3 obiekty sa dezaktywowane, jesli znajda sie poza room'em view'em

instance_activate_region(view_xview,view_yview,view_wview,view_hview,true);

 

To ssie, jest niedopracowane. Bo object z dużym spritem deaktywuje się później niż objecty z małym. I dochodzi potem do takich anomali że obiekty po aktywacji nachodzą na siebie, oczywiście tylko te, które te się poruszają np. potworki.

Nie raz jak tego używałem to się dziwiłem czemu potworki mi nachodzą na ściany i skały.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Wszystkim obiektom na mapie - drzewom, samochodom, blablabla dajesz jednego parenta objPARENT. Potem w stepie obiektu zarządzającego grą dajesz instance_deactivate_all(obj_parent) i instance_activate_region :) Tak mamy w Almorze i mapa 60000px jakoś działa :)

Odnośnik do komentarza
Udostępnij na innych stronach

a ja właśnie sprawdzam metody dezaktywacji i muszę powiedzieć, że jeśli wyłączymy auto redraw to aktywacja regionu nie działa, nawet jeśli w kodzie użyjemy screen_redraw().

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Tego nie próbowałem, muszę sprawdzić. W waszej almorze też potworki na ściany nachodzą.

 

Nie rozumiem. Obiekty po aktywacji są w tym samym miejscu co poprzednio i kontynuują ostatnio wykonywany kod :) Są tak jakby "zamrażane".

Odnośnik do komentarza
Udostępnij na innych stronach

żółte plami to aktywne obiekty, czerwone nie aktywne.

zielone to pozycja x i y objectów.

Mamy bossa i większą od niego skałę, x/y skały jest poza viewem i jest niewidoczna. a bossa nie więc jest widoczny i może się ruszać.

przesuwa się lekko w prawo.

ruchbossa2.png

 

po przejściu viewa w prawo odsłaniają się oba objecty

ruchbossa2.png

w efekcie są wklejone. Gdyby potworek był mały 32/32 też by do tego doszło ale tylko w zaznaczonym na czarno obszarze.

 

Edit: Zedytowane

Odnośnik do komentarza
Udostępnij na innych stronach

a ja właśnie sprawdzam metody dezaktywacji i muszę powiedzieć, że jeśli wyłączymy auto redraw to aktywacja regionu nie działa, nawet jeśli w kodzie użyjemy screen_redraw().

Poprawka - obiekt musi mieć maskę, dopiero działa na nim dezaktywacja, lol xD

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Hmm, możliwe. Dla tego ja aktywuję o 150px większy obszar niż room. Ewentualnie, gdy przeciwników nie jest wielu, to każdy z nich mógłby sobie na przykład aktywować region 200px dookoła niego, żeby kolizje dobrze łapać :)

 

Rozumiem, że dezaktywacja i aktywacja jest robiona względem pozycji X i Y bez względu na rozmiar maski ?

Odnośnik do komentarza
Udostępnij na innych stronach

żółte plami to aktywne obiekty, czerwone nie aktywne.

zielone to pozycja x i y objectów.

Mamy bossa i większą od niego skałę, x/y skały jest poza viewem i jest niewidoczna. a bossa nie więc jest widoczny i może się ruszać.

przesuwa się lekko w prawo.

http://img182.imageshack.us/img182/6383/ruchbossa2.png

 

po przejściu viewa w prawo odsłaniają się oba objecty

http://img12.imageshack.us/img12/6383/ruchbossa2.png

w efekcie są wklejone. Gdyby potworek był mały 32/32 też by do tego doszło ale tylko w zaznaczonym na czarno obszarze.

 

Edit: Zedytowane

 

Taka sytuacja nie może mieć miejsca, dlatego, ze potworki są sterowane przez serwer a tam nic nie jest raczej dezaktywowane. Potworki nie dostaną dzieki temu rozkazu by iść "w skałkę".

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