Przeszukałem internet, ale nie ma zbyt wielu zasobów do tworzenia gier Java, nie tak blisko jak C ++. W rzeczywistości większość silników jest napisanych w C ++. Próbowałem zagrać w grę stworzoną przez jMonkeyEngine, ale gra była strasznie wolna, do tego stopnia, że mój komputer zamarł. Nie miałem uruchomionych żadnych innych aplikacji Java i nic nie wymaga zbyt dużych zasobów. Natomiast mój komputer może z łatwością grać w większość nowoczesnych gier 3D. Jeśli nadal będę się uczyć i ulepszać Javę, a okaże się, że później będę musiał nauczyć się C ++, co może być trudne.
Czy Java jest językiem dopuszczalnym do poważnego tworzenia gier? Mówiąc poważnie, mam na myśli grafikę wysokiej jakości, bez większych opóźnień na nowoczesnych komputerach. Chcę też rozważyć tworzenie gier na konsole.
źródło
Odpowiedzi:
Tak, sprawdź tę listę, aby uzyskać dowód. Oto niektóre gry wykonane w Javie przy użyciu The Lightweight Java Game Library (LWJGL). Jest to struktura niskiego poziomu, która zapewnia OpenGL dla wysokiej jakości grafiki i OpenAL dla dźwięków. Zapewnia również wejściowy interfejs API. Dzięki nim możesz łatwo zacząć poważnie rozwijać gry w Javie.
Obecnie piszę swoją drugą grę 3D jako projekt hobby w Javie i po prostu ją uwielbiam. W przeszłości pisałem swoje gry w C ++, ale po przejściu na Javę nie ma już powrotu. Obsługa wielu systemów operacyjnych w Javie może być bardzo łatwa, na przykład moja poprzednia gra Java, którą opracowałem w Windows przez rok, działała od razu w Linuksie i w OS X z jednym błędem, bez potrzeby kompilacji czegokolwiek na tych platformach.
Z drugiej strony z Javą masz kilka problemów.
źródło
Nie całkiem. O to chodzi - po pierwsze, jest bardzo mało pod względem istniejących bibliotek dla Java w porównaniu z praktycznie wszystkim , co jest dla C ++.
Po drugie, Java jako język po prostu nie nadaje się do tworzenia gier - mam na przykład na myśli, że jeśli masz do czynienia z buforami GPU, Java nie zapewnia funkcji językowej, która pomoże ci upewnić się, że są one poprawnie zablokowane i odblokowane lub zutylizowane, co robi C ++. Ponadto występuje problem z wydajnością - a GC jest niedeterministyczna, co jest bardzo złe dla gry.
Nigdy nie widziałem żadnej gry niezależnej, która spędzała dużo czasu w języku, który nie został skompilowany z kodem natywnym przed wykonaniem, a nawet gry indie, które to robią, są rzadkością. Tak więc obecnie uważam, że po prostu nie da się tego zrobić.
Tak, absolutnie tak będzie. Java i C ++ są bardzo różne, pomimo ich powierzchownych podobieństw składniowych. Doświadczenie w Javie nie ma praktycznie żadnego znaczenia podczas nauki C ++.
Rozgrywka nad grafiką jest realnym wyborem i widać to w sukcesach takich gier jak Terarria i Minecraft. Ale jeśli zamierzasz tworzyć grafiki srs, nie będzie to możliwe w Javie.
źródło
Jeśli powodem wyboru Javy jest to, że nie rozumiesz C ++, twoje programy Java nie będą wystarczająco szybkie, aby uzyskać wysokiej jakości grafikę. Używanie języka wyższego poziomu powinno wynikać z tego, że zwiększa on produktywność, a nie dlatego, że nie można zrozumieć języka niższego poziomu.
Nie sądzę, aby pisanie gry w Javie było złym pomysłem, zwłaszcza jeśli gra jest prosta, ale od razu napotkasz problemy z wydajnością w Javie, jeśli używasz jej jako kuli.
Ciężka grafika: Możliwe, ale będziesz robić to samo w Javie / LWJGL, jak w C ++ / GL: zapisywanie bajtów do buforów GPU i / lub używanie przestarzałych list wyświetlania, jak robi to Minecraft. Jeśli nie rozumiesz zarządzania pamięcią, nie zrobisz tego poprawnie.
Szybka gra bez opóźnień: nie jest to łatwe zadanie w żadnym języku, a bardziej prawdopodobne jest, że i tak postrzelisz się w nogę bez zastanowienia.
Nie, Java nie będzie dostępna na konsolach.
źródło
Doświadczony programista na ogół zna wiele języków programowania - nauka dodatkowych języków programowania nie jest zbyt trudna, jeśli znasz dobrze jeden. Jednak zdecydowanie zalecałbym, aby C ++ nie był twoim pierwszym językiem, a prawdopodobnie również drugim.
Wynika to z faktu, że C ++ uzyskuje dużą wydajność, nie wykonując żadnych znaczących kontroli błędów w czasie wykonywania. Na przykład uzyskanie dostępu do elementu poza końcem tablicy w Javie zawsze spowoduje zgłoszenie wyjątku informującego programistę, co jest nie tak. W C ++ możesz mieć szczęście i natychmiast się zawiesi, ale bardzo często po cichu usunie inne dane, a błąd nie pojawi się dużo później .
Sugeruję, abyś na razie trzymał się Javy (lub przerzucił się na C #, jeśli wolisz). Pozwoli ci to zrobić wszystko szybciej niż przy użyciu C ++, a wydajność na komputerze nie powinna być problemem.
Pomyśl o nauce języka C ++ po ukończeniu kilku projektów w bezpieczniejszych językach. C ++ jest tym, czego potrzebujesz do większości profesjonalnych prac związanych z tworzeniem gier.
Zauważ, że z wyjątkiem C # / XNA, aby przynajmniej gra napisana na konsolę wymagała co najmniej założenia firmy, biura i dużego budżetu na sprzęt programistyczny i inne wydatki.
źródło
Oświadczenie: To nie odpowiada dokładnie na twoje pytanie. Próbowałem jednak (krótko) wspomnieć o niektórych kwestiach, które mogą Cię zainteresować.
Powodem, dla którego tak często widzisz C ++, jest to, że C ++ wciąż jest standardem branżowym - najpopularniejszym językiem dla konsol itp.
Java nie jest często używana. Minecraft to dość popularna gra, która zrobiła duży sukces dzięki Javie; ale nie jest tak świetny graficznie. Spiral Knights nie jest zły - również w Javie, ze znaczną grafiką.
Jeśli lubisz Javę, C # jest bardzo podobna pod względem składni, z tą zaletą, że może współpracować z C ++ - więc w razie potrzeby można wykonywać czynności niskopoziomowe w C ++. Unity może używać C # do pisania skryptów, a XNA jest doskonałym wyborem.
Znowu Java nie jest powszechnie używana. Jeśli podoba Ci się styl i składnia, myślę, że znajdziesz C # jako bardzo podobne, bardzo przyjemne doświadczenie kodowania.
Mam nadzieję, że dzięki twoim marzeniom po drodze będzie dużo zabawy :)
źródło
To nie odpowiada na twoje pytanie; problemy z grafiką i konsolą wydają się bardzo ważne. Również GC wpływa na wydajność. Ale o czym piszę:
Jeśli piszesz duże, złożone programy OO, napiszesz je 5 razy szybciej w Javie niż C ++. Ponadto konserwacja będzie znacznie łatwiejsza. Zmieniłem (co prawda na oprogramowanie inne niż gry), a moja wydajność gwałtownie wzrosła. C #, kolejna dobra alternatywa, jest trudniejsza do nauczenia się niż Java, ponieważ jest jej znacznie więcej. Znając go, możesz pisać kod nawet szybciej niż w Javie; oferuje wiele sztuczek. Uważam jednak, że te sztuczki mogą utrudniać konserwację. A potem jest dokument Java, który pomaga w bibliotekach Sun i twoim własnym starym kodzie. C # nie ma nic podobnego.
Zrobiłem dużą owłosioną grę w Javie i znalazłem język idealny, ale moja grafika była podstawowa i nie była to strzelanka, w której jedna dziesiąta sekundy była wiecznością dla graczy. Spodziewam się również, że w późniejszym czasie wiele do niego dodam, podczas gdy myślę, że większość ludzi po prostu idzie i pisze zupełnie nową grę.
źródło
Słuchaj, prosta odpowiedź na „Czy Java nadaje się dla twórców gier” jest oczywistym twierdzeniem. Do tworzenia gier możesz używać dowolnego języka programowania. To nie znaczy, że powinieneś .
Prawdopodobnie te rzeczy, które wyłączają cię z C ++ (zarządzanie pamięcią niskiego poziomu, brak śmieciarza, zwracanie uwagi na wskaźniki, struktury jako tablice itp.) To te rzeczy, których powinieneś się nauczyć, jeśli chcesz najbardziej efektywnie wykorzystywać zasoby komputera . Twoje gry będą działały najlepiej, jeśli najbardziej efektywnie wykorzystujesz zasoby komputera.
Java wykonuje pewne czynności (takie jak sprawdzanie granic tablic), które powodują, że działa wolniej. W tym zoptymalizowanym przykładowym kodzie szumu Java Perlin autor skomentował „(dostęp do tablicy jest znacznie wolniejszy niż dostęp do członka)”. Ten rodzaj rzeczy jest dość sprzeczny z intuicją pochodzący z tła C ++. Ale w Javie takie są.
Mówię: przestań unikać pocisku, naucz się C ++ i używaj go.
źródło
Powinieneś to robić w języku, który znasz najlepiej, dopóki nie stać Cię na formalne wykształcenie (Bachelor's of Science?) W dziedzinie informatyki, kładąc nacisk na projektowanie gier. Możesz użyć swojej gry, aby uzyskać stypendium, zwłaszcza jeśli możesz powiedzieć „Zrobiłem to bez formalnego szkolenia w Javie”
Współczesne maszyny JVM, nawet te z Oracle, mają wiele, wiele funkcji pozwalających odpowiedzieć na obawy, o których ludzie tu mówili. Możesz użyć różnych śmieciarek, aby uzyskać bardziej deterministyczne zachowanie śmieciarza. Nie mam dużego doświadczenia z bibliotekami 3D - tylko trochę z Jav3D - ale wydaje się, że nikt tutaj nie narzekał. Analiza ucieczki umożliwia teraz eliminację blokady i znacznie szybsze / nieznaczne przydzielanie bardzo krótkotrwałych obiektów.
Problem polega na tym, że niezależnie od tego, czy wybierzesz Javę C ++, musisz nauczyć się, jak prawidłowo używać współbieżności i dobrze rozumieć zarządzanie pamięcią. W końcu możesz tak łatwo zepsuć,
malloc
jak możesznew
. Nie wiem, jakie są narzędzia dla C ++, ale narzędzia do profilowania dla Javy są dość łatwe w użyciu, darmowe i zintegrowane z IDE. Możesz ich użyć do śledzenia problemów z wydajnością i uczenia się .źródło