it-swarm-eu.dev

Proč se pro vývoj her nepoužívá Java)?

Nejsem herní vývojář ani nic jiného, ​​ale vím, že Java se pro vývoj her příliš nepoužívá. Java by měla být dostatečně rychlá pro většinu her) "Tak kde je úlovek? Dokážu vymyslet několik důvodů:"

  • Nedostatek vývojářů her s odborností v Javě
  • Nedostatek dobrých rámců pro vývoj her
  • Programátoři nechtějí akceptovat Java jako programovací jazyk her. Většina akceptuje pouze C++?
  • Žádná podpora pro herní konzole (ačkoli trh s PC stále existuje)

Samozřejmě by to mohlo být něco jiného. Mohl by někdo, kdo zná firmu lépe než já, vysvětlit, proč Java nedostává dynamiku, pokud jde o vývoj her?

81
Anto

Několik důvodů:

  • Za starých časů jste potřebovali „přímý přístup“ pro výkon a uživatelské rozhraní. To předchází VM jazyky jako Java a C #.
  • Většina konzol (např. 360, PS3) nemá JVM, takže nemůžete znovu použít kód z verze PC. Je mnohem snazší kompilovat kód C++ pro podporu různých zařízení.
  • Většina herních modulů hlavního proudu (např. Unreal) má vazby C++. Existuje několik konektorů Java (např. Pro OpenGL)), ale nic podobného.
  • Pro hraní na PC nemá DirectX ve skutečnosti silnou podporu Java podpora (pokud vůbec)).
  • Webové hry fungují v jazyce JavaScript nebo Flash. Mohli byste je napsat v Java, i když používáte věci jako GWT).
  • IPhone provozuje variantu Objective-C.

Java se v těchto dnech používá především ve hrách Android) jednoduše proto, že je to primární jazyk této platformy.

95
Uri

Technické důvody:

  • Většina z nejlepších 3D herních enginů je psána v C/C++. To je velká věc, protože většina vývojářů her nechce dělat kompromisy ve svém 3D enginu, ale ani nechtějí psát jeden od nuly. Java má jMonkeyEngine což je open source a vlastně opravdu dobré, ale stále nemůže konkurovat nreal Engine .
  • Pro některé velmi vzácné situace existují výhody v tom, jak získat „blízko k kovu“ v jazyce C nebo Assembly, konkrétně pro přístup ke speciálním hardwarovým funkcím. To dnes není tak důležité, ale profesionální vývojáři her stále rádi mají možnost .....
  • Java obsahuje odpadky shromážděné , spravované běhové prostředí. 99% času je to obrovská výhoda, určitě to usnadňuje kódování a méně náchylné k chybám a je to jeden z hlavních důvodů, proč Java je tak populární). Způsobuje to však občasné zpoždění problém pro hry jako cykly sběru odpadu mohou způsobují patrné pauzy. S novějšími JVM s nízkou latencí se to stává méně problémem, ale stále jde o problém s graficky náročnými hrami, kde je udržování vysoké FPS kritické.

Netechnické důvody:

  • Domy pro profesionální vývoj her jsou silně investovány do dovedností a technologií C/C++. To vytváří obrovské množství setrvačnosti .
  • Z velké části iracionální vnímání , které Java je pomalé.) Pravděpodobně pravda v 90. letech, rozhodně nyní není pravda - určitě můžete napsat ziskovou, komerční 3D hru s Java ( Runescape někdo)? Nebo co takhle Minecraft ?)
  • Pěkné férové ​​vnímání , které Java je více zaměřeno na obchodní aplikace a web než na hraní her, může se to změnit s růst mobilních sítí a potřeba dalšího vývoje napříč platformami, ale v současnosti je to určitě pravda.

Zajímavé je také několik dobrých důvodů, proč vývojáři her měli zvážit Javu:

  • Přenositelnost - jak se počet cílových platforem šíří, Java se stává stále přitažlivější s tím, že je do značné míry nesrovnatelná schopnost vytvářet skutečně binární platformy napříč platformami
  • Knihovní ekosystém - s velmi důležitou výjimkou 3D herních motorů Java má nejlepší škálu knihoven ze všech Síť, zvuk, AI, zpracování obrazu, úložiště dat klíč/hodnota, pojmenujete téma a pravděpodobně existuje otevřený zdroj Java knihovna pro něj).
  • Vývoj na straně serveru - Java je skvělý langauge/platforma pro server a jak více her začleňuje masivně multi- prvky hráče na straně serveru se stávají stále důležitějšími. Java v systému Linux vypadá tady jako platforma docela přesvědčivě).
  • JVM - je pravděpodobně nejlepší inženýrské prostředí VM prováděcí prostředí na světě, s fantastickým sběrem odpadu, kompilátorem JIT, podpora souběžnosti atd. Jde jen o to, aby se zlepšilo, a jak vývojáři her začnou ve svých hrách stále více používat dynamické jazyky, budou chtít nejlepší možné runtime prostředí.
  • Jiné jazyky JVM - Java je solidní od workhorse, ale skutečné Inovace se děje s novými langaugy JVM (zejména Scala, Clojure). Tyto jazyky získávají všechny výhody platformy Java/JVM, plus jsou to velmi silné moderní jazyky.
81
mikera

Dobře, v tomto vláknu je hodně dezinformací.

Znám herní průmysl extrémně dobře, protože jsem v něm byl 25 let. Také vím Java ve hrách velmi dobře, že jsem byl Sunem Java herní technický evangelista a přednášel Java expert na programování výkonu).

Pokud jde o výpočetní rychlost, Java bije C++ v mnoha vědeckých výpočetních standardech dnes. Patologický kód můžete psát v jakémkoli jazyce, který má špatný výkon, pokud chcete, ale celkově jsou na stejné úrovni a byli na dlouhou dobu.

Pokud jde o využití paměti, Java má nějakou režii. HelloWorld je 4K program v Javě. Ale tato režie je v dnešních multi GB systémech zcela bezvýznamná. Nakonec Java má více času spuštění. Nedoporučoval bych používat Java pro krátkodobé obslužné programy, jako jsou příkazy příkazového řádku Unix. V těchto případech bude spuštění dominovat vašemu výkonu. V hra je však velmi nevýznamná.

Správně napsaný Java herní kód netrpí pauzy GC. Stejně jako kód C/C++ vyžaduje i nějakou aktivní správu paměti, ale ne na úroveň C/C++. využití paměti k objektům s dlouhou životností (přetrvávají na celé úrovni nebo ve hře) a velmi krátkotrvajícím objektům (vektory a podobně, projíždějící a rychle zničené po výpočtu) gc by nemělo být viditelným problémem.

Pokud jde o přímý přístup do paměti, Java to mělo již dlouhou dobu; od Java 1,4 ve formě Native Direct Byte Buffers). Bit twiddling in = Java může být mírně nepříjemné kvůli nedostatku nepodepsaných celých typů, ale pracovní kola jsou všechna známá a nejsou strašně obtížná).

I když jeho skutečná Java nikdy neměla vazbu Direct3D, je to proto, že Java technologie usilují o přenositelnost). Má dvě vázání OpenGL (JOGL a LWJGL) a vázání OpenAL (JOAL) a přenosná vazba vstupu (JInput), která se váže pod kapotou k DirectInput ve Windows, HID Manager v OSX a linuxové vazbě (na kterou zapomenu).

Je pravda, že žádný úplný herní engine nenabídl Java způsob, jak říká Unity), představoval C # a to je slabost v nezávislém prostoru. Na druhé straně existovaly dva dobré scénáře APIS které byly zcela přenosné na platformách Windows, OSX a Linux. Oba napsal Josh Slack, první se jmenoval motor JMonkey a druhý Ardor3D.

Vrcholový plakát je správný, že dvě největší věci, které držely Java zpět ve vývoji hry), byly předsudky a přenositelnost. Ten druhý byl největším problémem. Přestože můžete napsat Java hry a dodávat ji na Windows, OSX a Linux, nikdy nebyl konzolový VM. Důvodem byla úplná neschopnost ve středním managementu Sun. Málo z nás pracovalo na Java ve hrách) vlastně obchodoval se Sony nejméně třikrát, abych získal VM na PlayStation) a všechny 3krát střední management Sunu to zabil.

Zatímco Sun flirtoval s klientskými technologiemi, faktem je, že management Sun nikdy nedostal spotřebitelské produkty. To je důvod, proč Java jako jazyk klienta od společnosti Sun nikdy neuspěl v žádné formě, a proč trvalo Google a Dalvik (Android Java-like VM)) Java úspěch platformy kdekoli.

A proto dnes kóduji hry v C #. Protože Mono šlo tam, kde to Sun management odmítl.

29
user430788

Java je skvělá pro obchodní logiku, servery a kód nezávislý na platformě, který musí běžet spolehlivě. Existuje několik faktorů, proč Java se ve hrách často nepoužívá):

  • kontrola mezí a další bezpečnostní mechanismy (mezní rozdíl výkonu v těchto dnech)
  • museli převádět mezi datovými strukturami C++ a Java datovými strukturami (nelze pouze kopírovat paměť mezi vyrovnávacími paměťmi))
  • mnoho knih a tutoriálů následuje dav, takže je těžké najít informace o hře mimo hru C++
  • základní grafické knihovny (DirectX a OpenGL) a mnoho off-the-shelf motorů jsou založeny na C/C++
  • mnoho her se snaží běžet co nejrychleji, takže mohou přidávat další vizuálně přitažlivé funkce

Není snadné pracovat s C++ knihovnami z bytecode jazyků jako Java (psaní JNI vrstvy)) a .net (spousta marshalling/unmarshalling, api/strukturních atributů). trochu práce pro malý užitek.

Vedlejší poznámka: některé herní servery používají Javu.

Podobný příspěvek zde : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in- Java

9
Graeme Wicksted

Java není dostatečně rychlá pro většinu vývoje her. Je to mnohem pomalejší než použití C++/Assembly, což je standard. Je to stejný důvod, proč se další vývoj her nedělá pomocí C # nebo VB. Vývojáři her potřebují a plánují každý poslední hodinový cyklus, na který se mohou zaměřit, například na výpočty fyziky, logiku AI a interakce prostředí.

Pro jednodušší hry lze použít Java docela efektivně. Pokud chcete vytvořit klon Tetris nebo Bejeweled, nebo něco jiného z této úrovně detailů, bude Java fungovat dobře. Ale Java nemůže vytvářet hry jako Halo, Medal of Honor, Command & Conquer atd. A dělat je hratelnými. Alespoň jak to dnes existuje.

A důvody, které uvedete ve své otázce, jsou rovněž platné. Kromě toho si myslím, že pro nedostatek vývojářů her s odborností Java. Mnoho her na telefonech a jiných přenosných zařízeních je napsáno v Java (včetně většiny Android her)) a některé hry jsou celkem vynikající. Takže si myslím, že existuje slušná a rostoucí základna vývojářů her se znalostmi Java.

Myšlenka mění schopnost používat tyto vyšší úrovně jazyků pro některé pokročilejší hry. Například jedna z mých oblíbených her, Auran's Train Simulator, je napsána s velkými porcemi v C # a funguje to docela dobře. Základna tedy roste a bude se i nadále vyvíjet.

5
BBlake

Moderní hry jsou o 3D grafice, která se odehrává ve speciálním hardwaru.

Ještě v roce 2002 Jacob Marner ve své zprávě „Vyhodnocení Java pro vývoj her)“ zjistil, že Java byl docela použitelný pro hry, s výjimkou nejvýraznějších závislostí na výkonu) a díky robustnosti jazyka a základnímu JVM, že bylo levnější to dělat tímto způsobem.

http://Java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf

Je to můj osobní názor, že s pokrokem, ke kterému došlo od té doby, zejména v 3D grafice, as vynikajícími vazbami na OpenGL et al., Je tato nevýhoda v těchto dnech mnohem méně výrazná.

Proto musí být problém jinde. Pravděpodobným důvodem je velikost běhového prostředí Java (Java $ ===) (což je v těchto dnech mnohem méně problém u her s více disky DVD) a další setrvačnost existujícího kódu. Je notoricky křehké začít pracovat s nativním kódem v Javě. Třetí příčinou je to, s čím jsou vývojáři hvězd, kteří dělají hry, obeznámeni. Čtvrtým důvodem je, zda Java je na platformě vůbec k dispozici).

Jedna věc je ovšem jistá - většina her se od začátku mění v skriptování místo toho, aby vše vypálila v kódu C, a chcete pod skriptovacím jazykem nejlepší runtime. V dnešní době to v podstatě znamená buď CLR nebo JVM.

5
user1249

Vývojáři her by rádi byli blízko kovu a často budou psát své těsné vnitřní smyčky v Assembly. Java nenabízí stejnou úroveň možného výkonu, a to jak z hlediska konstantní rychlosti, ani využití paměti (spuštění JIT vybírá svou daň).

4
dan_waterworth

Myslím, že limitujícím faktorem pro většinu lidí je (nedostatek) dostupnosti dobrých herních enginů. Abychom se dostali velmi daleko, musíme se podívat, proč nejsou k dispozici.

Chtěl bych se na to na chvíli podívat z jiného směru. Vývoj herního enginu (například) je šarže práce. Kdo by měl z rozvoje jednoho dost na to, aby investoval čas a úsilí do toho?

Zdá se, že většina zjevných kandidátů na vývoj typu frameworku v/pro Java (např. IBM, Oracle) nemá žádný zájem o hry. Zjevní kandidáti na vývoj her (např. Id, EA) ) se zdají mít téměř stejně malý zájem o Javu.

Téměř pouze kandidát, o kterém si myslím, že se zdá být vůbec rozumný, bude Google. Primárním vývojovým jazykem pro Android je Java) a povzbuzující vývoj her pro Android mohl poskytuje skutečnou výhodu pro platformu.

Pokud vím, tak to ještě neudělali (zatím?), Což ponechává některé docela přísné limity téměř pro kohokoli jiného. Bez moderních, vysoce výkonných herních enginů, které by využívaly vývoj na Java znamená značně trochu práce navíc), s (co mi připadá) malá vyhlídka na výrobu mnoha prospěch za tuto práci navíc.

4
Jerry Coffin

Otázka je na stejné úrovni položit otázku v řádcích:

Co je lepší k pohonu vašeho automobilu, lodního motoru nebo proudového motoru.

Přichází na škálovatelnost, vyhýbání se chybám, rychlost, podpis paměti, modularitu a celou řadu věcí. Otázka by neměla být o tom, co je lepší jako průmyslový standard, otázkou by mělo být „co je pro mě lepší“, jako v tom, co znáte nebo jak dobře to víte. Pokud to dělá práci, pak to dělá práci, pokud můžete skutečně prodat myšlenku, pak to funguje a kdo ví, že byste dokonce mohli ohnout několik lžiček.

1
Meh

Java nebyla vytvořena s ohledem na vývoj her, Java byla vytvořena jako jazyk „pro web“.

Pokud jde o vývoj her, Sun opravdu nepodporoval Java jako jazyk pro vývoj her, protože Microsoft podporoval C #.

Myslím, že nedostatek přesvědčivých rámců pro vývoj her je to, co v tomto ohledu opravdu zabilo Java).

0
Mahmoud Hossam