Java 2D – Testy

Obiecałem, że przebadam trochę sprawę tworzenia gier w Javie. Jak dotąd udało mi się stworzyć okno wielkości 640×480 i powrzucać tam troszkę grafiki oglądając malejącą wartość licznika FPS.

Z tą grafiką nie jest wcale tak źle. W Linuksie (gdzie Java chodzi wolniej niż w Windowsie) przy samym czyszczeniu i ekranu FPS wahał się od 1500 do 2000. Wrzuciłem więc na ekran 1000 linii. Dla każdej linii kolor losowany był tuż przed narysowaniem. Dało to piękny efekt migoczących kresek na ekranie z prędkością około 400 FPS.

Następnym krokiem było usunięcie tęczowych linii i zastąpienie ich obrazkiem PNG wielkości 40×40 z kanałem Alpha. Tutaj wydajność już mnie tak nie zaskoczyła gdyż 100 takich obrazków spowodowało spadek wydajności do około 55 FPS.

Postanowiłem więc zmniejszyć nieco swoje oczekiwania i podmieniłem obrazek na JPG (wielkości tej samej i oczywiście bez Alpha 😉 ). Okazało się, że 100 takich grafik namalowało się powodując spadek jedynie do około 70 FPS.

Na koniec stworzyłem sobie grafikę 640×480 jako tło i wrzuciłem na okno. Wówczas średnia prędkość rysowania wyniosła około 230 FPS.

Z tego co zaobserwowałem wydajność Javy przy grafice 2D jest porównywalna z wydajnością SDLa, a skoro jest tak i ludzie programują gry z użyciem SDL to dlaczego nie można by programować gier w Javie?

Należy jednak zdać sobie sprawę, z faktu, że sama prędkość rysowania to jeszcze nie wszystko. Pozostaje kwestia samej mechaniki gry. Jeśli będzie ona przeprowadzać wiele obliczeń to ona może się okazać wąskim gardłem całego programu.

Wydaje mi się jednak, że do wielu gier taka wydajność w zupełności wystarczy, a jeśli nie to zawsze można popróbować różnych bibliotek co również zamierzam uczynić 🙂

Reklamy

9 myśli nt. „Java 2D – Testy

  1. Odsyłam do wpisu nt. ukończenia Titoe, gdzie w komentarzu dałem link do swojej gry w Javie 😉 Jej wydajność pod Linuxem niestety nie powala…

    • Aha!

      Znalazłem Twój brakujący komentarz. Akismet uznał go za SPAM (pewnie dlatego, że miał ze sobą link). Teraz już jest ok ^^

  2. A chętnie bym obejrzał, ale niestety pod informacją o zakończeniu Titoe nie mam żadnych komentarzy 😉

    Hmm… a może znów niedobry Akismet coś ukroił…

    Tak czy inaczej to z Javą pod linuxem choć nie jest najszybciej to bardzo ważne jest aby uzywać JRE od Suna. W ubuntu domyślnie ładuje się Open JDK, a ono strasznie muli. O GCJ wole się nie wypowiadać już w ogóle ;P

  3. Właśnie zainteresowały mnie Twoje testy na tyle, że tą gierkę odkopałem gdzieś na dysku. Używam SUNowskiej Javy (OpenJDK działa identycznie, GCJ nawet nie próbowałem od czasu kiedy nie był w stanie udźwignąć Eclipsa), próbowałem już ustawiać zarządzanie pamięcią, koligację, optymalizowałem też trochę pętelki i ilość tworzonych obiektów w rendererze, przestawiałem jakość grafiki (antialiasing, przezroczystości) – nic z tego… albo jest jakiś poważny problem z tą Javą / swingiem /Linuxem albo my mamy talent do czynienia Javy nieprzenośną 😀

    • A w jaki sposób rysujecie mapę? Bo np. te „kloce” to możnaby narysować na jednej większej bitmapie i potem tylko tę jedną rysować zamiast zawsze od nowa. Te ziarna właściwie też możnaby było wrzucić na „jedną” bitmapę.

      To, że ziarenka są animowane trochę komplikuje sprawę ale też możnaby temu zaradzić – przygotować przed startem gry odpowiednie bitmapy zawierające animacje z ziarnami ułożonymi tak jak na planszy.

      Wtedy na jedną klatkę animacji przypadałoby narysowanie: tła (1 bmp), ziaren (1-2 bmp), domku, duchów i gracza. Pomijam GUI które już jest jedną bitmapą. To wszystko daje razem 5+ bitmap do narysowania. Z taką ilością to Java sobie poradzi bezproblemowo raczej 😛

  4. Zainstalowałem dziś Ubuntu 9.04 Jurny Jarząbek (dla próby, bo docelowo chciałem poznać się z nową Fedorą) i o dziwo zaskoczyło mnie to jak NetBeans szybko pracuje. Okazało się, że nawet mój SeedMan stał się grywalny! O.O Wciąż działa nieco wolniej niż na Windows ale już dość płynnie. Na Ubuntu 8.10, którego używałem do tej pory, a także na różnych innych dystrybucjach było to nieosiągalne. Wiesz może co się takiego zmieniło w 9.04, że Java tak wyraźnie przyśpieszyła? Jestem tak miło zaskoczony wydajnością tego wydania Ubuntu, że chyba nawet z Fedorą zaczekam aż Ubuntu się jak zwykle rozsypie…

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s