Chiusa. Questa domanda è fuori tema . Attualmente non accetta risposte.

Commenti

  • Non è ' minecraft costruito con java? O principalmente OpenGL? Oh, e controlla C # se non sei impostato al 100% su java, perché è fantastico.
  • Perché non ' vieni alla chat C ++ di Stack Overflow ? Adoriamo il C ++, pensiamo che possa essere assolutamente usato correttamente e sappiamo come farlo e ' saremmo totalmente felici di condividerlo.
  • Minecraft è java + LWJGL + Notch ' capacità di codifica, quindi dal punto di vista delle prestazioni è TERRIBILE.
  • Che si tratti di giochi di codifica o di qualsiasi altra cosa, chiudersi in un unico la lingua non ti aiuterà in futuro. Espandi un po , o C ++ o qualcosaltro come Python. Ci vuole tempo, ma ti rende uno sviluppatore migliore.
  • ' riceverai molta disinformazione perché le guerre Java / C ++ bruciano brillantemente, sii pronto a chiedere esempi specifici prima di accettare unopinione e anche a ricercare di più da solo =) Detto questo, sono daccordo con @loganfsmyth sul fatto che dovrai conoscere molte lingue perché solo allora puoi scegliere lo strumento giusto per qualsiasi attività . Nellimmediato futuro, se vuoi solo imparare la " programmazione dello stile di gioco ", usa ciò che ' ti senti a tuo agio con (Java) e poi impara C ++ in seguito. Diamine, in seguito potresti creare pipeline di contenuti in C # e giochi in Java ME, difficile da prevedere =)

Risposta

Sì, controlla questo elenco per una prova. Questi sono alcuni giochi realizzati con Java utilizzando The Lightweight Java Game Library (LWJGL). È un framework di basso livello, che fornisce OpenGL per grafica di alta qualità e OpenAL per i suoni. Fornisce inoltre API di input. Con questi puoi iniziare abbastanza facilmente a sviluppare giochi seri in Java.

Attualmente sto scrivendo il mio secondo gioco 3D come progetto per hobby in Java, e lo adoro. In passato scrivevo i miei giochi con C ++, ma dopo essere passato a Java non si torna indietro. Supportare più sistemi operativi con Java può essere molto semplice, ad esempio il mio precedente gioco Java, che ho sviluppato in Windows per un anno, funzionava subito in Linux e in OS X con un solo bug senza alcuna necessità di compilare nulla su quelle piattaforme.

Daltra parte, con Java hai un paio di problemi.

  1. Garbage collector. Come altri hanno affermato, la gestione della memoria non deterministica è un problema ed è necessario codificarlo in mente.
  2. Mancanza di librerie di terze parti. La maggior parte delle librerie disponibili non supporta Java. Daltra parte hai sempre la possibilità di chiamare queste librerie native anche da Java, ma è più faticoso farlo. Ci sono anche porte Java o wrapper già pronti disponibili per le librerie più diffuse, ad esempio io “sto usando JBullet: port Java di Bullet Physics Library . Daltra parte Java ha unenorme libreria di classi integrata, che riduce la necessità di librerie di terze parti che non sono correlate ai giochi. La mancanza di librerie non è stata un problema per me, ma posso immaginare che possa esserlo per altri.
  3. Java non è supportato dalle console di gioco più diffuse e non è facile passare a quelle da Java per quanto riguarda come so. Daltra parte Android, che è una popolare piattaforma mobile, utilizza una qualche forma di Java. Anche questa è unopzione, ma non eccetto lo stesso codice Java per funzionare sia su un PC che su un dispositivo Android.
  4. Comunità più piccola. La maggior parte dei programmatori di giochi usa C ++ e nella mia esperienza spesso non piace Java. Don ” Non mi aspetto di ricevere tanto aiuto dagli altri. Non aspettarti di trovare un lavoro nello sviluppo di giochi senza competenze C ++.

Risposta

Non proprio. Qui “è il punto: in primo luogo, cè molto poco in termini di librerie esistenti per Java rispetto a praticamente tutto che è per C ++.

In secondo luogo, Java come linguaggio semplicemente non si presta bene allo sviluppo di giochi – Voglio dire, ad esempio, se hai a che fare con i buffer della GPU, Java non fornisce una funzionalità del linguaggio che ti aiuterà a garantire che siano correttamente bloccati e sbloccati o eliminati, che C ++ fa. Inoltre, cè il problema delle prestazioni e il GC non è deterministico, il che è pessimo per un gioco.

Non ho mai visto nessun gioco non indipendente che abbia trascorso molto tempo in un linguaggio che non è stato compilato in codice nativo prima dellesecuzione, e anche i giochi indipendenti che lo fanno sono una rarità.Quindi la mia convinzione in questo momento è che semplicemente non può essere fatto.

Inoltre, se continuo a imparare e migliorare Java ora, e si scopre che più tardi Devo imparare il C ++, sarà difficile eseguire il passaggio?

Sì, assolutamente lo sarà. Java e C ++ sono molto diversi, nonostante le loro superficiali somiglianze sintattiche. Lesperienza Java non conta praticamente nulla quando si impara il C ++.

Il gameplay sulla grafica è una scelta praticabile e lo si può vedere nel successo di giochi come Terarria e Minecraft. Ma se intendi creare grafica srs, non sarà possibile in Java.

Commenti

  • +1 poiché ha specificato pesante grafica, gioco veloce senza ritardi.
  • Java ' anche la mancanza di tipi di dati non firmati è contraria. Sì, puoi aggirarlo, ma ' non è lideale e ' utilizzerai un codice che ' non rispecchia realmente il i dati sottostanti correttamente.
  • @deadmg Caso di bloccato e sbloccato , ti riferisci ad alcune funzionalità API di DirectX? & Puoi dimmi, che cosa ' è così brutto nellavere un GC non deterministico.
  • GC non deterministico può equivalere alla perdita di frame, se si ottiene un cattivo arresto world pause e blocca le cose più a lungo di quanto ci vuole per renderizzare il frame. In pratica questo ' non accade davvero spesso / mai se pianifichi la tua memoria use, i collector di JVM ' possono essere configurati per una pausa bassa (ben entro i limiti di sicurezza per la perdita di frame). Tuttavia, ' non è una cosa divertente da affrontare. Finisci per dover restituire quantità significative della produttività che hai guadagnato quando hai lasciato C ++.
  • Per iniziare ' dovrai riscrivere completamente.

Risposta

Quindi, sono davvero serio riguardo sviluppo di giochi, Java è ancora una scelta praticabile? Ho provato più volte a imparare il C ++, ma non mi piace molto la lingua. Non so davvero perché, ma di solito, ogni volta che cerco di imparare, non riesco mai a cogliere gli argomenti.

Se il motivo per cui scegli Java è che non puoi “non capire C ++, i tuoi programmi Java non saranno abbastanza veloci per una grafica di alta qualità.” Usare un linguaggio di livello superiore dovrebbe essere perché ti rende più produttivo, non perché non puoi capire il linguaggio di livello inferiore.

Non penso che sia una cattiva idea scrivere un gioco in Java, soprattutto se il gioco è semplice, ma se lo utilizzi come stampella ti imbatterai immediatamente in problemi di prestazioni.

Quindi, in breve, Java può essere preso sul serio, per lo sviluppo di giochi seri. Ciò include grafica pesante, gioco veloce senza ritardi e possibilmente e facile passaggio alle console?

  1. Grafica pesante: possibile, ma farai la stessa cosa in Java / LWJGL come in C ++ / GL: scrivere byte nei buffer della GPU e / o utilizzare il elenchi di visualizzazione obsoleti come fa Minecraft. Se non comprendi la gestione della memoria, non lo farai neanche correttamente.

  2. Gioco veloce senza ritardi: non è un compito facile in nessuna lingua ed è più probabile che ti spari ai piedi in entrambi i casi senza pensarci due volte.

  3. No, Java non sarà disponibile su console.

Commenti

  • Come domanda secondaria, cosa ha sostituito gli elenchi di visualizzazione quando sono stati deprecati?
  • @Suds: pipeline programmabile, credo.
  • ha! già coperto. VBOs : gamedev.stackexchange.com/questions/22170/…
  • Le piattaforme mobili potrebbero essere considerate console. Mi rendo conto che probabilmente stava parlando dei tre grandi, ma Android utilizza Java e per questo vengono creati molti giochi.
  • @ Amplify91 sì, alcuni giochi sono scritti in java per Android. Ma la cosa migliore i giochi e probabilmente tutti i giochi ad alta intensità grafica o multipiattaforma sono scritti in C ++ utilizzando Android NDK.

Answer

Un esper I programmatori esperti generalmente conoscono molti linguaggi di programmazione – imparare linguaggi di programmazione extra non è troppo difficile una volta che ne conosci uno bene. Tuttavia, raccomando caldamente che C ++ non dovrebbe essere la tua prima lingua, e probabilmente nemmeno la seconda.

Questo perché C ++ ottiene molta della sua efficienza dal non fare alcun controllo significativo degli errori di runtime. Ad esempio, laccesso a un elemento al di fuori della fine di un array in Java genererà sempre uneccezione che dice esattamente al programmatore cosa cè che non va.In C ++ potresti essere fortunato e si bloccherà immediatamente, ma molto spesso cestina silenziosamente altri dati e lerrore non verrà visualizzato fino a molto tempo dopo .

Ti suggerisco di restare con Java per ora (o di passare a C # se preferisci). Ciò ti consentirà di fare le cose più velocemente rispetto allutilizzo del C ++ e le prestazioni su un PC non dovrebbero essere un problema.

Pensa a imparare il C ++ dopo aver completato alcuni progetti in linguaggi più sicuri. C ++ è ciò di cui avrai bisogno per la maggior parte dei lavori di sviluppo di giochi professionali.

Tieni presente che, ad eccezione del fatto che C # / XNA per ottenere un gioco che hai scritto su una console come minimo, devi creare unazienda, con un ufficio e disponi di un ampio budget disponibile per lhardware di sviluppo e altre spese.

Commenti

  • Questo è anche eccezionalmente vero perché altri linguaggi oltre al C ++ lo faranno darti un senso di realizzazione. C ++ può impiegare centinaia di ore per quello che può sembrare niente. Imparare prima altre lingue ti fa bagnare i piedi.
  • I tuoi commenti sulla gestione della mancanza di errori sono davvero su C (e il cosiddetto codice C ++ che in realtà è C). C ++ ha librerie standard (e librerie di modelli standard) che hanno una gestione degli errori molto migliore di quella che descrivi. C ++ ha anche librerie fornite dal fornitore (come MFC) che forniscono buona gestione degli errori.

Risposta

Dichiarazione di non responsabilità: Questo non risponde esattamente alla tua domanda. Tuttavia, ho tentato di menzionare (brevemente) alcuni punti che potrebbero interessarti.

La ragione per cui vedi così tanto su C ++ è perché C ++ è ancora lo standard del settore – il linguaggio più comune per console, ecc.

Java non è usato frequentemente. Minecraft è un gioco piuttosto popolare che ha avuto successo con Java; ma graficamente non è un gran che. Spiral Knights non è male, anche questo fatto in Java, con una grafica significativa.

Se ti piace Java, C # è molto simile nella sintassi, con il vantaggio che può interoperabilità con C ++ – quindi le cose di basso livello possono essere fatte in C ++ se necessario. Unity può usare C # per lo scripting e XNA è una scelta eccellente.

Anche in questo caso, Java non è ampiamente utilizzato. Se ti piace lo stile e la sintassi, penso che troverai C # unesperienza di programmazione molto simile e molto piacevole.

Spero che i tuoi sogni lo realizzino, è “molto divertente lungo la strada 🙂

Commenti

  • Moltissime imprecisioni in questi post. Minecraft " pessimo " la grafica non è (pesantemente) correlata al linguaggio. Le cattive prestazioni di MC sono direttamente correlate al fatto che Java è un cattivo linguaggio per i giochi a causa di enormi problemi di prestazioni e LWJGL è una libreria inadatta per grandi progetti di codifica per lo stesso motivo Ma il fattore più importante è stato Notch

    cattiva codifica e implementazione, che viene risolta … lentamente. C # offre tutti i vantaggi della memoria gestita senza la maggior parte dei problemi di prestazioni di Java. Il rovescio della medaglia è che C # è fortemente incentrato su Microsoft sia per i giochi che per le applicazioni.

  • @EfEs: odio dirlo a te, ma la memoria gestita è terribile per i giochi e le persone che programmano i giochi in XNA devono dedicare più tempo alla gestione della memoria rispetto alle persone che codificano in C ++. La natura non deterministica del GC significa che devi raggruppare praticamente tutto ed evitare lallocazione come la peste, non il modo in cui la lingua avrebbe dovuto essere utilizzata.
  • Questa risposta non doveva essere accurata al 100% ; Ho citato solo esempi di cui so vagamente. Sentiti libero di DV.
  • @DeadMG So che C ++ è la strada da percorrere, stavo solo cercando di spiegare che C # è migliore di Java per i giochi.
  • Essendo C # da molto tempo sviluppatore (non il pensiero dello sviluppatore di giochi) Credo che il pooling e la gestione della memoria siano grandi problemi per qualsiasi sistema mal progettato. Le persone con la mentalità C / C ++ e le modalità di sviluppo che conosco, difficilmente rimangono senza fiato nella memoria gestita, nel design e nei modelli di architettura che devono essere utilizzati e ne traggono vantaggio in un linguaggio come Java / C #. Quello che sto cercando di dire, non è che le tecniche oi prodotti C / C ++ siano cattivi, ma che anche se usi linguaggi più semplici in termini di sintassi (come Java e C #), hai comunque bisogno di molta esperienza per progettare il tuo gioco nel modo giusto modo.

Risposta

Guarda amico, la semplice risposta a “È Java viable for game dev “è un ovvio sì. Puoi utilizzare qualsiasi linguaggio di programmazione per creare giochi. Questo non significa che dovresti .

Probabilmente proprio le cose che ti allontanano da C ++ ( gestione della memoria a basso livello, nessun garbage collector, dover prestare attenzione a puntatori, strutture come array ecc.) sono proprio le cose che dovresti imparare se vuoi sfruttare un computer “s risorse in modo più efficiente .I tuoi giochi funzioneranno al meglio se stai sfruttando le risorse del computer in modo più efficiente.

Java fa alcune cose (come il controllo dei limiti dellarray) che lo rendono solo più lento. In questo codice di esempio di rumore Java Perlin ottimizzato, lautore ha commentato “(laccesso allarray è molto più lento dellaccesso ai membri)”. Questo genere di cose è piuttosto controintuitivo se viene da uno sfondo C ++. Java, queste cose sono.

Dico smettila di schivare il proiettile, impara C ++ e usalo.

Rispondi

Questo non risponde alla tua domanda; i problemi di grafica e console sembrano essere qualcosa che devi assolutamente considerare. Anche il GC influisce sulle prestazioni. Ma di cosa scrivo:

Se stai scrivendo programmi OO grandi e complessi, li scriverai 5 volte più velocemente in Java che in C ++. Inoltre, la manutenzione sarà molto più semplice. Ho cambiato (ammettiamolo per software non di gioco) e la mia produttività è schizzata alle stelle. C #, unaltra buona alternativa, è più difficile da imparare di Java perché ce nè molto di più. Quando lo conosci, puoi scrivere codice anche più velocemente che in Java; ti offre molti trucchi. Tuttavia, trovo quei trucchi può rendere difficile la manutenzione. E poi cè il documento Java, che aiuta con le librerie Sun e il tuo vecchio codice. C # non ha niente di simile.

Ho fatto un grande gioco peloso in Java e ho trovato il linguaggio perfetto, ma la mia grafica era elementare e non era “uno sparatutto in cui un decimo di secondo era uneternità per il Inoltre, mi aspetto di aggiungere molto in seguito, mentre penso che la maggior parte delle persone vada a scrivere un gioco nuovo di zecca.

Risposta

Dovresti farlo nella lingua che conosci meglio finché non puoi permetterti unistruzione formale (Bachelor” s of Science?) in Informatica, enfatizzando il game design . Potresti usare il tuo gioco per ottenere una borsa di studio, soprattutto se puoi dire “Lho fatto senza alcuna formazione formale in Java”

JVM moderne, anche quello di Oracle, ha molte, molte funzionalità per affrontare le preoccupazioni che le persone hanno sollevato qui. È possibile utilizzare diversi garbage collector per ottenere un comportamento più deterministico del garbage collector. Non ho una vasta esperienza con le librerie 3D – solo un po con Java3D – ma nessuno qui sembra essersene lamentato. Lanalisi di fuga ora consente lelisione del blocco e unallocazione molto più veloce / trascurabile di oggetti di brevissima durata.

Il problema è che se scegli Java di C ++, dovrai imparare come usare correttamente la concorrenza e avere una buona conoscenza della gestione della memoria. Dopotutto, puoi facilmente sbagliare con malloc come con new. Non so come siano gli strumenti per C ++, ma gli strumenti di profilazione per Java sono abbastanza facili da usare, gratuiti e integrati con lIDE. Puoi usarli per rintracciare i problemi di prestazioni e imparare .

Commenti

  • Listruzione formale in CS vale la pena di merda per le effettive capacità di programmazione in qualsiasi disciplina. Lo saprei, io ' sono al terzo anno.
  • Decisamente in disaccordo con DeadMG. Dopo essermi laureato e scelto i corsi che mi piacciono, CS ha portato i miei poteri di sviluppo del gioco dal 10% al 100%. div id = “457f10ef6a”>

t insegnami linterfaccia utente, liconografia, ecc. ma il codice reale, reale.

  • @ ashes999: Allora sei stato fortunato. Il mio corso è inutile e so che lì sono molti altri che la pensano allo stesso modo.
  • @DeadMG è ' difficile da vedere quando ' stai studiando Una volta che lavori per un paio danni F / T e apprendi altre abilità complementari, ' vedrai. Lho fatto. Ma forse Ho prestato molta attenzione e ho cercato di applicare tutto al mio hobby di sviluppo di giochi.
  • ' direi che dipende dalla scuola e dal professore. Ho seguito alcuni ottimi corsi di programmazione in cui ho imparato un sacco; e ne avevo alcuni in cui sentivo di aver perso conoscenza partecipando. ' è tutto sullavere o meno un buon professore. IMO.
  • Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *