(defpost Programowanie gier w Javie i LWJGL

Java jest językiem, który zdaje się nie mieć zbyt dobrej opinii wśród programistów gier komputerowych. Kwestie porównywania wydajności tych języków są dość ciekawe, ale ostatecznie w tym miejscu interesuje nas praktyczna możliwość użycia ich do tworzenia gier. O ile język C++ ma pod tym względem niekwestionowaną pozycję lidera, o tyle Java wciąż przez swą złą opinię zdaje się być mało rozwinięta w dziedzinie gamedevu. Powoduje to, że ktoś kto chce napisać grę (lub aplikację graficzną) w Javie nie za bardzo wie, czego szukać.

Chciałbym w tym miejscu polecić wszystkim bibliotekę LWJGL (Lightweight Java Game Library). W dużym uproszczeniu składa się ona z bindów OpenGL i OpenAL pod Javę, funkcji do obsługi wejścia z klawiatury i myszy oraz garści drobnych klas narzędziowych. Wspiera tworzenie gier zarówno jako aplikacji jak i apletów. Główną zaletą jest przede wszystkim uporządkowanie wejścia, audio i grafiki w jednej bibliotece, dzięki czemu możemy szybko zabrać się za tworzenie gry z pomocą dobrych, wieloplatformowych bibliotek. Więcej informacji, przykłady, dokumentacja zamieszczone są na stronie projektu: http://www.lwjgl.org/. Testowałem, działa świetnie ;) (niedługo wrócę do tego tematu, bo zamierzam opublikować projekt zaliczeniowy z Programowania Obiektowego, którym była gra pisana w Javie z pomocą LWJGL).

Jeśli Czytelniku niepokoisz się kwestią wydajności języka, proponuję Ci zagrać w grę, która mnie ostatecznie przekonała do sensowności pisania gier w tym języku i mocno zareklamowała LWJGL:
http://fabiensanglard.net/Prototyp/index.php
Osobiście nie spodziewałem się zobaczyć tyle FPS w JAKIEJKOLWIEK grze opartej o Javę, ale na szczęście nie jest tak źle jak kiedyś mi się wydawało.

Mimo wszystko jednak Java jest językiem różniącym się od C++ w koncepcji zarządzania pamięcią, co w przypadku programowania gier ma duże znaczenie. Trzeba pisać kod dużo ostrożniej i w sposób przemyślany, żeby unikać niepotrzebnego kopiowania obiektów (w miarę możliwości unikać go w ogóle – wszystko alokowane dynamicznie) oraz aliasowania się nazw zmiennych (plątające się przypadkiem po różnych obiektach referencje do składowych innego obiektu; jest to ogólna, dla mnie upierdliwa, cecha wielu języków nowszych od C++, np. PHP5). Niewątpliwie niewygodny jest też brak możliwości przeciążania operatorów.

Dla tych, którzy szukają całych silników graficznych mam dobrą wiadomość – istnieją porty Irrlicht’a i Ogre pod Javę :) .

(tags , , , , , , )

4 Responses to “Programowanie gier w Javie i LWJGL”

  1. Fus says:

    Java ma złą opinie przeż ociężałe GUI moim zdaniem. Qt Jambi działa za to perfekcyjnie, choć dziwnie wyglądają sloty (w C++ zrobione na markach) w Javie – podajesz nazwe jako string ;)

    Co ciekawsze – NASA używa Java Astrodynamics Toolkit, zobaczcie wstęp: http://jat.sourceforge.net/

    PS. ostatnio dowiedziałem się, że Java na 64 bitowych systemach zabiera dużo więcej pamięci, bo uważa, że pracuje na maszynie stricte serwerowej i ma jej sporo ;)

  2. Fus says:

    szkoda, że nie można edytować komentarzy. Pragnę dodać tylko, że na prezentacji JAT’a są też ciekawe testy szybkości, m.in. z fortranem i matlabem:
    http://aaaprod.gsfc.nasa.gov/TEAS/JAT.pdf

  3. Asmodeusz says:

    Cóż, Java jest Java, jest wolna, zamulasta i wymaga maszyny wirtualnej. Już znacznie lepszy do pisania gier byłby .NET – jest opcja alokacji na stosie, ręcznego (w miarę) zarządzania kopiowaniem obiektów, są value-types, jest bezpośredni dostęp do obiektów COM i funkcji natywnych – tylko czekać, aż ktoś napisze port/nakładkę dla DirectX10 pod .NET ;) No i .NET Framework ma każdy, kto ma windowsa – w Viście i XP SP2 jest z automatu minimum w wersji 2.0.

  4. Fus says:

    “Cóż, Java jest Java, jest wolna, zamulasta i wymaga maszyny wirtualnej.”
    Java jest szybka, pracuje wydajnie i działa na VM. Może podasz jakieś konkrety, testy, porównania?

    “No i .NET Framework ma każdy, kto ma windowsa”
    Każdy kto _ma_ windowsa :)

    ciekawostka:
    http://www.mono-project.com/Scripting_With_Mono
    a przez IKVM (JavaVM na .NET) można skrypcić gry również w Javie (oprócz pythonów, C# itp).

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

SexpCode: You can use SexpCode tags.

) ;end of defpost