07 grudnia 2016

Rogalik - grafika!

Ostatnie dni miałem uciążliwie męczące i po powrocie do domu niebardzo miałem ochotę na jakiekolwiek prace przy grze. Nie znaczy to jednak, że zarzuciłem jakikolwiek jej rozwój. Poświęciłem kilka godzin na napisanie podstawowego mechanizmu animującego aktorów na ekranie. Oczywiście wiązało się to z przeczytaniem masy dokumentów, kilku rozdziałów książki Killer Java Game Programming, kilku wątków na StackOverflow, czegoś o javiefx, paru (nastu?) wpisów z blogów o programowaniu...

Pierwsza wersja aplikacji rysującej (gdy zaczęła cokolwiek rysować) psuła się dosyć poważanie ponieważ zjadała nieograniczone ilości pamięci. Szukając rozwiązania problemu (rosnący w nieskończoność GrowableBuffer w obiekcie Canvas) ściągnąłem przykłady z sieci dotyczące animowania w javieFX. Te zaś zjadały kosmiczne ilości czasu procesora (jedna animująca gwiazdki
w ekranie 400x600px zjadała ... 25% czasu procka CoreI5!) lub zatrzymywały się po kilkunastu minutach pracy.

Moja pętla rysująca zawierała błąd, który powodował, że animacja zatrzymywała się samoczynnie po kilku minutach. Aktualnie  mam problem z tym, że animacja działa, ale spowalnia po ok 10 minutach pracy.  Spaliłem duuużo czasu na znalezienie prawidłowego sposobu animowania klatek z użyciem komponentów javyfx tak, aby ciężar rysowanego obrazu nie rósł w nieskończoność. Przy okazji przypomniałem sobie trochę o obsłudze wątków i grafiki.
No i  udało  się - przynajmniej w ramach ograniczonego testu jaki wykonuję.  W tej chwili aplikacja animuje i rysuje to co trzeba, a poniżej zrzut z efektu jej działania.

Z technicznego punktu widzenia na ekranie gry będzie sześć warstw (w tej chwili rysowane są 3)
  • tło (jest)
  • podłoga (aktualnie połączona z warstwą ścian)
  • ściany
  • dodatki do pomieszczeń (np. skrzynie)
  • aktorzy (jest)
  • efekty specjalne

Warstwy, które są odświeżane dynamicznie (co klatkę) to tylko aktorzy. W niektórych momentach dojdzie odświeżanie dodatków do pomieszczeń - np. pochodni oraz w miarę potrzeb animacje na warstwie efektów specjalnych. Zaoszczędza
to duużo czasu i obliczeń komputera.


Napisany kod nie jest w 100% optymalny i da się jeszcze ograniczyć ilość wykonywanych przy grafice obliczeń. Widoczne obok okienko "zjada" na stałe ~100 MB pamięci - nie udało mi się zejść poniżej tej liczby. Taka już chyba uroda javyfx połączonego z moim kodem.
Niestety z czasem (> 20 minut) animka zwalnia znacząco i jednocześnie zaczyna zjadać więcej pamięci. Coś z moim kodem jest jeszcze poważnie nie tak...


Nie zrobiłem jeszcze pełnego opisu wszystkich rysunków używanych w grze stąd brak jakichś upiększaczy na załączonym zrzucie - w tej chwili mam opisanych 16 bohaterów i ich dwuklatkową :) animację, niebieską podłogę oraz ściany, tło oraz drzwi.

Brak komentarzy:

Prześlij komentarz

Tu możesz wstawić swój komentarz