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