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 Irrlicht, Java, LWJGL, Ogre, OpenAL, OpenGL, Tworzenie gier)
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
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
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.
“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).