Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

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 ;)

Opublikowano

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);

 

 

Czarno na białym. ;d

Opublikowano
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:

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

  • Administratorzy
Opublikowano

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 :)

Opublikowano

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().

  • Administratorzy
Opublikowano
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".

Opublikowano

żół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

Opublikowano
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

  • Administratorzy
Opublikowano

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 ?

Opublikowano
żół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ę".

Opublikowano

To ciekawe bo okno serwera almory mówi co innego. Wyraźnie widać że potworki pojawiają się tylko wtedy kiedy gracz do nich podchodzi. A znikają kiedy odchodzi.

 

Gnysek jak jest naprawdę w almorze, gracze dezaktywują potworki czy nie?

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