Nie jestem twórcą gier ani nic takiego, ale wiem, że Java nie jest powszechnie używana do tworzenia gier. Java powinna być wystarczająco szybka dla większości gier, więc gdzie jest haczyk? Mogę wymyślić kilka powodów:
- Brak twórców gier z doświadczeniem w Javie
- Brak dobrych ram tworzenia gier
- Programiści nie chcą akceptować Java jako języka programowania gier. Większość akceptuje tylko C ++ jako taki?
- Brak wsparcia dla konsol do gier (choć rynek PC nadal istnieje)
Oczywiście może to być coś innego. Czy ktoś, kto zna ten biznes lepiej ode mnie, może wyjaśnić, dlaczego Java nie nabiera rozpędu, jeśli chodzi o tworzenie gier?
java
game-development
Anto
źródło
źródło
Odpowiedzi:
Kilka powodów:
Java jest obecnie używana głównie w grach na Androida, ponieważ jest to podstawowy język dla tej platformy.
źródło
malloc
lubnew
, więc jeśli jest to problem, zamierzasz zastosować pooling bez względu na wszystko. Nie związany z tym punktem, duży problem z Javą polega na tym, że nie obsługuje typów wartości, w przeciwieństwie do C #.Powody techniczne:
Powody nietechniczne:
Co ciekawe, istnieją również dobre powody, dla których twórcy gier powinni rozważyć Javę:
źródło
Okej, w tym wątku jest dużo dezinformacji.
Znam działalność gra bardzo dobrze, będąc w nim przez 25 lat. Znam też Javę w grach, będąc ewangelistą technicznym Sun Game firmy Java i wykładowcą specjalizującym się w programowaniu wydajności Java.
Jeśli chodzi o szybkość obliczeń, Java pokonuje obecnie C ++ w wielu testach naukowych w dziedzinie obliczeń. Możesz napisać kod patologiczny w dowolnym języku, który źle sobie radzi, jeśli chcesz, ale przede wszystkim są one na równi i działały przez długi czas.
Jeśli chodzi o wykorzystanie pamięci, Java ma pewne narzuty. HelloWorld to program 4K w Javie. Ale ten narzut jest dość bez znaczenia w dzisiejszych systemach z wieloma GB. Wreszcie Java ma więcej czasu na uruchomienie. Nie polecałbym używania Javy do krótkotrwałych narzędzi, takich jak polecenia wiersza poleceń systemu Unix. W takich przypadkach start będzie dominował w Twojej wydajności. W grze jest to jednak dość mało znaczące.
Prawidłowo napisany kod gry Java nie ulega przerwom GC. Podobnie jak kod C / C ++, wymaga aktywnego zarządzania pamięcią, ale nie do poziomu C / C ++. Tak długo, jak utrzymasz wykorzystanie pamięci do obiektów długo żyjących (trwających przez cały poziom lub grę) i bardzo krótko żyjących (wektory i takie, przekazywane i szybko niszczone po obliczeniach) gc nie powinno być widocznym problemem.
Jeśli chodzi o bezpośredni dostęp do pamięci, Java ma to od dłuższego czasu; od Java 1.4 w formie Native Direct Byte Buffers. Kręcenie się bitów w Javie może być nieco irytujące z powodu braku niepodpisanych typów liczb całkowitych, ale wszystkie rundy pracy są dobrze znane i nie strasznie uciążliwe.
Chociaż jego prawdziwa Java nigdy nie miała powiązania Direct3D, to dlatego, że technologie Java dążą do przenoszenia. Posiada DWA powiązania OpenGL (JOGL i LWJGL) i OpenAL (JOAL) oraz przenośne powiązanie wejściowe (JInput), które łączy się pod maską z DirectInput w systemie Windows, HID Manager w OSX i powiązanie z Linuksem (nie pamiętam, które).
Prawdą jest, że żaden kompletny silnik do gry nie zawierał Java w taki sposób, jak powiedzmy Unity, ma C # i jest to słabość w niezależnej przestrzeni. Z drugiej strony były dwa dobre APIS na poziomie Scenegraph, które były całkowicie przenośne dla platform Windows, OSX i Linux. Oba napisane przez Josha Slacka, pierwsze nazwano silnikiem JMonkey, a drugie Ardor3D.
Górny plakat ma rację, że dwie największe rzeczy, które powstrzymały Javę w rozwoju gier, to uprzedzenia i przenośność. Ten ostatni był największym problemem. Chociaż możesz napisać grę Java i wysłać ją na system Windows, OSX i Linux, nigdy nie było konsoli VM. Było to spowodowane całkowitą nieudolnością średniego kierownictwa firmy Sun. Nieliczni z nas pracujący nad Javą w grach faktycznie mieli umowy z Sony nie mniej niż 3 razy, aby uzyskać maszynę wirtualną na Playstation i wszystkie 3 razy średnie kierownictwo Sun zabiło ją.
Podczas gdy Sun flirtował z technologiami klienckimi, faktem jest, że zarząd firmy Sun nigdy nie otrzymał produktów konsumenckich. Właśnie dlatego Java jako język klienta firmy Sun nigdy nie odniosła sukcesu w żadnej formie i dlaczego Google i Dalvik (wirtualna maszyna Java podobna do Java) sprawiły, że Java odniosła sukces wszędzie.
I dlatego dzisiaj koduję gry w C #. Ponieważ Mono poszło tam, gdzie kierownictwo firmy Sun odmówiło.
źródło
Java doskonale nadaje się do logiki biznesowej, serwerów i kodu niezależnego od platformy, który musi działać niezawodnie. Istnieje kilka czynników, dlaczego Java nie jest często używana w grach:
Nie jest łatwo pracować z bibliotekami C ++ z języków kodu bajtowego, takich jak Java (pisanie warstwy JNI) i .net (wiele atrybutów marshalling / unmarshalling, api / structure). Daje to sporo pracy przy niewielkich korzyściach.
Uwaga dodatkowa: niektóre serwery gier używają Java.
Podobny post tutaj : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java
źródło
Java nie jest wystarczająco szybka do większości gier. Jest znacznie wolniejszy niż użycie C ++ / Assembly, który jest standardem. Jest to ten sam powód, dla którego nie rozwija się więcej gier przy użyciu C # lub VB. Twórcy gier potrzebują i planują każdy ostatni cykl zegara, który mogą zdobyć, na potrzeby obliczeń fizycznych, logiki AI i interakcji środowiska.
W przypadku prostszych gier Java może być używana dość skutecznie. Jeśli chcesz utworzyć klon Tetris lub Bejeweled lub coś innego o takim poziomie szczegółowości, Java działałaby dobrze. Ale Java nie jest w stanie stworzyć gier takich jak Halo, Medal of Honor, Command & Conquer itp. I sprawić, że będzie można w nią grać. Przynajmniej tak, jak istnieje obecnie.
Powody, które podajesz w swoim pytaniu, są również ważne. Z wyjątkiem, jak sądzę, braku twórców gier ze znajomością języka Java. Wiele gier na telefony i inne urządzenia przenośne jest napisanych w Javie (w tym większość gier na Androida), a niektóre z nich są całkiem doskonałe. Myślę więc, że istnieje przyzwoita i stale rozwijająca się baza programistów gier ze znajomością języka Java.
Zmienia się myśl o możliwości używania tych języków wyższego poziomu w niektórych bardziej zaawansowanych grach. Na przykład jedna z moich ulubionych gier, Auran's Train Simulator, jest napisana z dużymi częściami w języku C # i działa całkiem dobrze. Baza rośnie, więc będzie ewoluować.
źródło
Nowoczesne gry polegają na grafice 3D na sprzęcie specjalnego przeznaczenia.
Nawet w 2002 r. Jacob Marner stwierdził w swoim raporcie „Evaluating Java for Game Development”, że Java jest całkiem użyteczna w grach, z wyjątkiem części najbardziej zależnych od wydajności, a ze względu na solidność języka i leżącą u jego podstaw JVM jest tańsza zrobić to w ten sposób.
http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf
Osobiście uważam, że wraz z postępem, jaki się dokonał, zwłaszcza w grafice 3D, oraz ze świetnymi powiązaniami z OpenGL i innymi, ta wada jest obecnie znacznie mniej wyraźna.
Dlatego problem musi być gdzie indziej. Prawdopodobnym powodem jest rozmiar środowiska uruchomieniowego Java (co jest obecnie znacznie mniejszym problemem w przypadku gier na wiele płyt DVD), a kolejną przyczyną jest bezwładność istniejącego kodu. Praca z rodzimym kodem w Javie jest bardzo krucha. Trzecim powodem jest to, z czym znają się twórcy gier. Czwarta kwestia dotyczy tego, czy Java jest w ogóle dostępna na platformie.
Jedno jest pewne - większość gier staje się skryptowalna, a nie od samego początku wypalana w kodzie C, a Ty potrzebujesz najlepszego środowiska uruchomieniowego pod językiem skryptowym. W dzisiejszych czasach oznacza to zasadniczo CLR lub JVM.
źródło
Twórcy gier lubią być blisko metalu i często piszą swoje ciasne wewnętrzne pętle w asemblerze. Java nie oferuje tego samego poziomu możliwej wydajności, zarówno pod względem stałej szybkości, jak i wykorzystania pamięci (uruchamianie JIT ma swoje żniwo).
źródło
Myślę, że czynnikiem ograniczającym dla większości ludzi jest (brak) dostępności dobrych silników do gier. Aby dotrzeć bardzo daleko, musimy sprawdzić, dlaczego nie są one dostępne.
Przez chwilę patrzyłem na to z drugiej strony. Opracowanie silnika gry (na przykład) to dużo pracy. Kto by na tyle skorzystał z opracowania takiego, aby zainwestować czas i wysiłek, aby to zrobić?
Większość oczywistych kandydatów do tworzenia frameworków w / dla Java (np. IBM, Oracle) wydaje się nie mieć zainteresowania grami. Widoczni kandydaci do tworzenia gier (np. Id, EA) wydają się mieć prawie równie małe zainteresowanie Javą.
Prawie jedynym kandydatem, który mogę o tym myśleć, wydaje się być w ogóle rozsądny. Podstawowym językiem programowania dla Androida jest Java, a zachęcanie do tworzenia gier dla Androida może zapewnić prawdziwą korzyść dla platformy.
O ile wiem, nie zrobili tego (jeszcze?), Co pozostawia dość poważne ograniczenia dla prawie każdego innego. Bezproblemowe działanie nowoczesnych, wysokowydajnych silników gier do programowania w Javie oznacza sporo dodatkowej pracy, a (jak mi się wydaje) niewielkie szanse na uzyskanie wielu korzyści w zamian za tę dodatkową pracę.
źródło
Pytanie jest na równi z pytaniem:
Co lepiej zasilać samochód, silnik łodzi lub silnik odrzutowy.
Wszystko sprowadza się do skalowalności, unikania błędów, szybkości, sygnatury pamięci, modułowości i wielu innych rzeczy. Pytanie nie powinno dotyczyć tego, co jest lepsze jako standard branżowy, powinno brzmieć „co jest dla mnie lepsze”, jak w tym, co wiesz lub jak dobrze to wiesz. Jeśli to zrobi, to zrobi robotę, jeśli rzeczywiście możesz sprzedać pomysł, to zadziała i kto wie, że możesz zgiąć kilka łyżek.
źródło
Java nie została stworzona z myślą o tworzeniu gier, Java została stworzona jako język „dla Internetu”.
Jeśli chodzi o tworzenie gier, Sun tak naprawdę nie obsługiwał Java jako języka programowania gier, ponieważ Microsoft wspierał C #.
Myślę, że brak atrakcyjnych ram do tworzenia gier jest tym, co naprawdę zabiło Javę w tym aspekcie.
źródło
Łatwiej jest przykleić C bardziej bezpośrednio do zupełnie nowego niekonwencjonalnego sprzętu i sterowników. Im szybciej i bliżej programista gier będzie w stanie dotrzeć do sprzętu, tym lepiej będzie mógł wyprzedzić konkurencyjne gry. Późniejsi programiści trzymają się tej samej metodologii i narzędzi, co te wcześniej sprawdzone.
W przypadku gier, w których optymalizacja do najnowszego sprzętu jest mniej ważna, takich jak zwykłe gry na telefony komórkowe, użycie C w ten sposób jest mniej ważne niż większa przenośność Javy.
źródło
Dla niektórych osób powód nie ma nic wspólnego z prędkością, bibliotekami czy dostępnością. Jest to po prostu z powodu samego języka. Niektórzy ludzie po prostu nie lubią języka Java. Inni wolą używać swojego ulubionego języka programowania zamiast Java do tworzenia gier.
źródło
Jest to język tłumaczenia, tzn. Powolny. Masz do czynienia z kartą graficzną i sprzętową. Jaki jest dobry język do radzenia sobie ze sprzętem? C ++, jest dość niski i masz do czynienia ze wskaźnikami i tym podobne.
Jeśli chcesz wypompować szaloną grafikę, taką jak crysis i cokolwiek innego, nie zamierzasz robić dla niej Java.
Mało tego, Oracle jest właścicielem Java, myśl, że firma może cię pozwać, nie jest odważna. Zwłaszcza, jeśli chcesz zbudować własny interpretator JAVA, aby celować w gry bez pozywania ze względu na fragmentację FUD.
źródło