Uzavřeno. Tato otázka je mimo téma . Momentálně nepřijímá odpovědi.

Komentáře

  • Není ' t minecraft postaven s Java? Nebo hlavně OpenGL? Oh a podívejte se na C #, pokud nejste 100% nastaveni na java, protože je to úžasné.
  • Proč nepřijdete ' na chat C ++ Stack Overflow ? Milujeme C ++, myslíme si, že se dá absolutně správně použít, a víme, jak to udělat, a ' bychom se mohli s naprostou radostí podělit.
  • Minecraft je java + LWJGL + Notch ' s kódovacími schopnostmi, takže z hlediska výkonu je to POVAŽNÉ.
  • Ať už jsou vaše kódovací hry nebo cokoli jiného, uzamknete se do jediného jazyk vám v budoucnu nepomůže. Rozdělte se trochu, buď C ++, nebo něco jiného, jako je Python. Vyžaduje to čas, ale uděláte z vás lepšího vývojáře.
  • Dostanete

spoustu dezinformací, protože války Java / C ++ jasně hoří, buďte připraven požádat o konkrétní příklady před přijetím stanoviska a také zkoumat více na vlastní pěst =) Jak již bylo řečeno, souhlasím s @loganfsmyth, že budete potřebovat znát mnoho jazyků, protože jen tak si můžete vybrat vhodný nástroj pro jakýkoli úkol . V nejbližší budoucnosti, pokud se chcete naučit " programování herních stylů ", použijte to, co ' vyhovuje (Java) a pak se naučí C ++ později. Sakra, později možná děláte kanály obsahu v C # a hry v Javě ME, těžko předvídatelné =)

Odpovědět

Ano, přečtěte si tento seznam , kde najdete důkaz. To jsou některé hry vytvořené pomocí Javy pomocí The Lightweight Java Game Library (LWJGL). Jedná se o nízkoúrovňový framework, který poskytuje OpenGL pro vysoce kvalitní grafiku a OpenAL pro zvuky. Poskytuje také vstupní API. S těmito můžete docela snadno začít s vážným vývojem her v Javě.

V současné době píšu svoji druhou 3D hru jako hobby projekt v Javě a prostě ji miluji. V minulosti jsem své hry psal pomocí C ++, ale po přechodu na Javu už není cesty zpět. Podpora více operačních systémů pomocí Javy může být velmi snadná, například moje předchozí Java hra, kterou jsem rok vyvíjel ve Windows, fungovala hned v Linuxu a v OS X s jedinou chybou, aniž by bylo nutné na těchto platformách něco kompilovat.

Na druhou stranu s Javou máte několik problémů.

  1. Sběratel odpadků. Jak již uvedli jiní, nedeterministická správa paměti je problém a je třeba to mít na paměti.
  2. Nedostatek knihoven třetích stran. Většina dostupných knihoven nepodporuje Javu. Na druhou stranu máte vždy možnost volat tyto nativní knihovny také z Javy, ale je to mnohem více práce. Pro populární knihovny jsou k dispozici také porty Java nebo hotové obaly, například používám JBullet – port Java v Bullet Physics Library . Na druhou stranu má Java zabudovanou obrovskou knihovnu tříd, což snižuje potřebu knihoven třetích stran, které nesouvisejí s hrami. Nedostatek knihoven pro mě nebyl problém, ale dovedu si představit, že to může být i pro ostatní.
  3. Java není podporována populárními herními konzolami a neexistuje snadný přechod na ty z Javy Pokud vím. Na druhou stranu Android, což je populární mobilní platforma, používá nějakou formu Javy. Toto je také možnost, ale kromě toho, že stejný kód Java nebude fungovat jak na PC, tak na zařízení Android.
  4. Menší komunita. Většina herních programátorů používá C ++ a podle mých zkušeností se jí Java nelíbí. “ Neočekávám, že dostanu tolik pomoci od ostatních. Neočekávejte, že získáte práci ve vývoji her bez dovedností C ++.

Odpověď

Ve skutečnosti ne. Tady „to je věc – za prvé, existuje jen velmi málo existujících knihoven pro Javu ve srovnání s prakticky vším , co je pro C ++.

Zadruhé, Java jako jazyk jednoduše „Nevyhovuje dobře vývoji her – mám na mysli například, pokud řešíte vyrovnávací paměti GPU, pak Java neposkytuje jazykovou funkci, která vám pomůže zajistit, aby byly správně uzamčeny a odemčeny nebo zlikvidovány, což C ++ ano. Navíc je tu problém s výkonem – a GC je nedeterministický, což je pro hru super špatné.

Nikdy jsem nepozoroval žádnou hru, která by byla nezávislá, a která strávila nějaký čas v jazyk, který nebyl před spuštěním zkompilován do nativního kódu, a dokonce i nezávislé hry, které to dělají, jsou vzácností.Nyní tedy věřím, že to prostě nejde.

Také, pokud se teď budu nadále učit a vylepšovat Javu, a ukáže se, že později Musím se naučit C ++, bude přechod obtížný?

Ano, rozhodně ano. Java a C ++ se výrazně liší, navzdory povrchním syntaktickým podobnostem. Zkušenosti s Java se při učení C ++ nepočítají prakticky pro nic.

Hra přes grafiku je je životaschopnou volbou a můžete ji vidět na úspěchu her jako Terarria a Minecraft. Pokud ale chcete vytvořit grafiku srs, pak to v Javě nebude možné.

Komentáře

  • +1, protože zadal heavy grafika, rychlé hraní bez prodlev.
  • Java ' nedostatek nepodepsaných datových typů také stojí proti. Ano, můžete to obejít, ale ' není ideální a ' budete používat kód, který ' skutečně neodráží správně podkladová data.
  • @deadmg Je případ zamčen a odemčen , máte na mysli nějaké funkce rozhraní DirectX api? & Můžete řekněte mi, co je ' tak špatné na tom, že nemáte nedeterministickou GC.
  • Nedeterministická GC se může rovnat upuštění snímků, pokud se vám špatně svět se pozastaví a zamkne věci na déle, než je potřeba k vykreslení rámečku. V praxi se to opravdu neděje ', pokud si plánujete paměť použití, kolektory JVM ' s lze nakonfigurovat na nízkou pauzu (v bezpečných mezích pro vynechání rámce). Přesto ' to není zábavná věc, s níž se musíme vypořádat. Nakonec musíte odevzdat značné množství produktivity, které jste získali, když jste opustili C ++.
  • Začátek musíte ' úplně přepsat.

Odpověď

Takže to myslím opravdu vážně vývoj her, je Java stále schůdnou volbou? Zkoušel jsem se několikrát naučit C ++, ale jazyk se mi moc nelíbí. Opravdu nevím proč, ale obvykle, kdykoli se pokusím naučit, nikdy nemohu uchopit témata.

Pokud je vaším důvodem pro výběr jazyka Java to, že nerozumíte jazyku C ++, vaše programy Java nebudou pro rychlou grafiku dostatečně rychlé. Používání vyšší úrovně jazyka by mělo být proto, že vás zvyšuje produktivitu, ne proto, že byste nedokázali rozumět jazyku nižší úrovně.

Nemyslím si, že je úplně špatný nápad napsat hru Java, zejména pokud je hra jednoduchá, ale pokud narazíte na problémy s výkonem v Javě, budete ji okamžitě používat jako berlu.

Stručně řečeno, lze Javu brát vážně, kvůli serióznímu vývoji her. To zahrnuje těžkou grafiku, rychlé hraní her bez prodlení a případně snadný přechod na konzoly?

  1. Heavy Graphics: Možné, ale v prostředí Java / LWJGL budete dělat to samé jako v C ++ / GL: psaní bajtů do vyrovnávacích pamětí GPU a / nebo použití zastaralé seznamy zobrazení, jako to dělá Minecraft. Pokud nerozumíte správě paměti, nebudete to dělat správně ani vy.

  2. Rychlé hraní bez prodlevy: Není to snadný úkol v žádném jazyce a je větší pravděpodobnost, že si v obou směrech zastřelíte nohu, aniž byste na to mysleli.

  3. Ne, Java nebude na konzolách k dispozici.

Komentáře

  • Co se týče vedlejší otázky, co nahradilo seznamy zobrazení, když byly zastaralé?
  • @Suds: Programovatelný plynovod, myslím.
  • ha! již to pokrýval. VBO : gamedev.stackexchange.com/questions/22170/…
  • mobilní platformy mohou být považovány za konzoly. Uvědomuji si, že pravděpodobně mluvil o velké trojce, ale Android používá Javu a je pro ni vytvořena spousta her.
  • @ Amplify91 ano, několik her je napsáno v java pro Android. hry a pravděpodobně všechny graficky náročné hry nebo hry pro více platforem jsou psány v C ++ pomocí Android NDK.

Odpověď

Exper programátor s ovládáním bude obecně znát mnoho programovacích jazyků – naučit se další programovací jazyky není příliš těžké, jakmile jeden dobře znáte. Důrazně však doporučuji, aby C ++ nebyl vaším prvním jazykem a pravděpodobně ani druhým jazykem.

Je to proto, že C ++ získává velkou efektivitu tím, že neprovádí žádnou významnou kontrolu chyb za běhu. Například přístup k prvku mimo konec pole v Javě vždy vyvolá výjimku, která programátorovi řekne přesně, co se děje.V C ++ můžete mít štěstí a okamžitě spadne, ale velmi často tiše vyhodí některá další data a chyba se neobjeví až mnohem později .

Navrhuji, abyste se zatím drželi Java (nebo pokud chcete, přepněte na C #). To vám umožní dělat věci rychleji než pomocí C ++ a výkon na PC by neměl být problém.

Přemýšlejte o tom, jak se naučit C ++, až dokončíte několik projektů v bezpečnějších jazycích. C ++ je to, co budete potřebovat pro většinu profesionálních úloh vývoje her.

Všimněte si, že s výjimkou C # / XNA pro získání hry, kterou jste napsali na konzoli, je minimálně nutné založit společnost s kancelář a mít k dispozici velký rozpočet na vývojový hardware a další výdaje.

Komentáře

  • To platí také výjimečně, protože jiné jazyky kromě jazyka C ++ budou vám dá pocit úspěchu. C ++ může trvat stovky hodin, než se člověk může cítit jako nic. Nejprve se naučíte jiné jazyky, abyste si mohli promočit nohy.
  • Vaše komentáře k řešení chyb bez chyb jsou opravdu o C (a tzv. C ++ kódu, který ve skutečnosti je C). C ++ má standardní knihovny (a standardní knihovny šablon), které mají mnohem lepší zpracování chyb než to, co popisujete. C ++ má také knihovny poskytované prodejcem (například MFC), které poskytují slušné zpracování chyb.

Odpověď

Odmítnutí odpovědnosti: To přesně neodpovídá na vaši otázku. Pokusil jsem se však (krátce) zmínit některé body, které by vás mohly zajímat.

Důvod, proč toho o C ++ tolik vidíte, je ten, že C ++ je stále průmyslovým standardem – nejběžnějším jazykem pro konzoly atd.

Java se často nepoužívá. Minecraft je docela populární hra, díky které se díky Javě stala velkou; ale graficky to není tak skvělé. Spiral Knights není špatný – také v Javě, s výraznou grafikou.

Pokud máte rádi Javu, C # je velmi podobný v syntaxi, s výhodou, že může interop s C ++ – takže v C ++ lze v případě potřeby provádět věci na nízké úrovni. Unity může pro skriptování použít C # a XNA je vynikající volbou.

Opět není Java příliš rozšířená. Pokud chcete styl a syntaxe, myslím, že „C # shledáte velmi podobným, velmi příjemným zážitkem při kódování.

Doufám, že to vaše sny zvládnou, je to při tom spousta zábavy :))

Komentáře

  • V tomto příspěvku je spousta nepřesností. Minecraft " bad " grafika nesouvisí (silně) s jazykem. Špatný výkon MC přímo souvisí s tím, že Java je špatný jazyk pro hry, protože OBROVSKÉ problémy s výkonem, a LWJGL je nevhodná knihovna pro velké kódovací projekty ze stejného důvodu Ale největším faktorem byl Notch

    špatné kódování a implementace, která se opravuje … pomalu. C # vám poskytuje všechny výhody spravované paměti bez většiny problémů s výkonem prostředí Java. Nevýhodou je, že C # je silně zaměřený na Microsoft pro hry i aplikace.

  • @EfEs: Nerad vám to rozbíjím, ale spravovaná paměť je pro hry hrozná a lidé, kteří kódují hry v XNA, musí trávit více času správou paměti než lidé, kteří kódují v C ++. Nedeterministická povaha GC znamená, že musíte spojit prakticky vše a vyhnout se alokaci jako mor – ne způsob, jakým měl být jazyk používán.
  • Tato odpověď neměla být stoprocentně přesná ; Uvedl jsem pouze příklady, o kterých vím nejasně. Nebojte se DV.
  • @DeadMG Vím, že C ++ je způsob, jak jít, jen jsem se snažil vysvětlit, že C # je pro hry lepší než Java.
  • Být dlouho C # vývojář (ne vývojář hry) Věřím, že sdružování a správa paměti jsou velkým problémem pro každý špatně navržený systém. Lidé s C / C ++ přístupem a způsoby vývoje, které znám, těžko dýchají do spravované paměti, vzorů a vzorů architektury, které je třeba použít, a využívají je v jazyce, jako je Java / C #. To, co se snažím říct, není to, že techniky nebo produkty C / C ++ jsou špatné, ale že i když používáte jednodušší jazyky z hlediska syntaxe (jako Java a C #), stále potřebujete spoustu zkušeností, abyste mohli svou hru navrhnout správně způsobem.

Odpověď

Podívejte se, vole, jednoduchá odpověď na „Je Java životaschopný pro hru dev „je zřejmé ano. K výrobě her můžete použít libovolný programovací jazyk. To neznamená, že byste měli .

Pravděpodobně právě to, co vás od C ++ odradí ( správa paměti na nízké úrovni, žádný sběratel odpadků, nutnost věnovat pozornost ukazatelům, strukturám jako polím atd.) jsou ty samé věci, které byste se měli naučit, pokud chcete zneužít počítač zdroje nejefektivněji .Vaše hry poběží nejlépe, pokud využíváte zdroje počítače nejefektivněji.

Java dělá některé věci (například kontrolu hranic polí), díky nimž běží pomaleji. V tento optimalizovaný ukázkový kód šumu Java Perlin, autor komentoval „(přístup k poli je mnohem pomalejší než přístup členů)“. Tento druh věcí je docela kontrapunktivní vycházející z pozadí C ++. Ale v Java, takové věci jsou.

Říkám přestat se vyhýbat kulkám, naučit se C ++ a používat to.

Odpovědět

To neodpovídá na vaši otázku; problémy s grafikou a konzolou se zdají být něco, co musíte velmi zvážit. Také GC ovlivňuje výkon. Ale o čem píšu:

Pokud píšete velké, složité OO programy, budete je psát 5krát rychleji v Javě než C ++. Také údržba bude mnohem jednodušší. Přešel jsem (samozřejmě pro neherní software) a moje produktivita prudce vzrostla. C #, další dobrá alternativa, je těžší se naučit než Java, protože je toho mnohem víc. Když to víte, můžete psát kód ještě rychleji než v Javě; nabízí vám spoustu triků. Tyto triky mi však připadají může ztížit údržbu. A pak je tu dokument Java, který pomáhá s knihovnami Sun a s vaším starým kódem. C # nemá nic podobného.

Udělal jsem velkou chlupatou hru v Javě a zjistil jsem, že jazyk je perfektní, ale moje grafika byla elementární a nebyla to ta střílečka, kde desetina sekundy byla věčnost hráči. Také očekávám, že k tomu později hodně přidám, zatímco si myslím, že většina lidí prostě jde a napíše úplně novou hru.

Odpověď

Měli byste to dělat v jazyce, který znáte nejlépe, dokud si nebudete moci dovolit formální vzdělání v oboru informatiky s důrazem na herní design . K získání stipendia byste mohli použít svou hru, zvláště pokud můžete říci „Udělal jsem to bez jakéhokoli formálního školení v Javě“

Moderní JVM, dokonce i ten od společnosti Oracle, má mnoho, mnoho funkcí k řešení problémů, které zde lidé vyvolali. Můžete použít různé garbage collectors, abyste získali více deterministické chování garbage collector. Nemám rozsáhlé zkušenosti s 3D knihovnami – jen málo s Java3D – ale zdá se, že si na ně nikdo nestěžoval. Úniková analýza nyní umožňuje vyloučení zámku a mnohem rychlejší / zanedbatelnější alokaci velmi krátkých objektů. >

Problém je v tom, že ať už zvolíte Javu jazyka C ++, budete se muset naučit správně používat souběžnost a dobře rozumět správě paměti. Nakonec můžete stejně snadno pokazit malloc, jak můžete new. Nevím, jaké jsou nástroje pro C ++, ale profilovací nástroje pro Javu jsou poměrně snadno použitelné, bezplatné a integrované do IDE. Můžete je použít ke sledování problémů s výkonem a učení .

Komentáře

  • Formální vzdělávání v CS stojí za hovno pro skutečné programátorské dovednosti v jakékoli disciplíně. Věděl bych, že I ' m v mém třetím ročníku.
  • Rozhodně nesouhlasím s DeadMG. Po absolvování a výběru kurzů, které se mi líbí, CS vzal mé schopnosti vývoje her z 10% na 100%. div id = „457f10ef6a“>

neučte mě UI, ikonografii atd., ale skutečné, skutečné kódování.

  • @ ashes999: Pak jste měli štěstí. Můj kurz je bezcenný a vím, že tam je mnoho dalších, kteří se cítí stejně.
  • @DeadMG je ' těžké vidět, když ' studujete . Jakmile budeš pracovat několik let F / T a naučíš se další doplňkové dovednosti, uvidíš ' já. Ale možná Jen jsem věnoval velkou pozornost a snažil jsem se vše aplikovat na své hobby.
  • Já ' říkám, že to záleží na škole a profesorovi. Měl jsem několik skvělých kurzů programování, kde jsem se naučil spoustu; a měl jsem pár, kde jsem vlastně cítil, že jsem účastí ztratil znalosti. Všechno to ' je mít dobrého profesora nebo ne. IMO.
  • Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *