Java è utilizzabile per lo sviluppo di giochi seri? [chiuso]


64

Ho esplorato Internet, ma non ci sono molte risorse per lo sviluppo di giochi Java, non quasi quanto il C ++. In effetti, la maggior parte dei motori sono scritti in C ++. Ho provato a giocare a un gioco realizzato con jMonkeyEngine, ma il gioco è stato terribilmente lento, al punto in cui il mio computer si è bloccato. Non avevo altre applicazioni Java in esecuzione e niente di troppo dispendioso in termini di risorse. Al contrario, il mio computer può giocare con la maggior parte dei moderni giochi 3D con facilità. Se continuo a imparare e migliorare Java ora, e in seguito mi viene richiesto di imparare C ++, rendere lo switch potrebbe essere difficile.

Java è un linguaggio accettabile per lo sviluppo di giochi seri? Per serio, intendo grafica di alta qualità, senza molto ritardo sui computer moderni. Voglio anche prendere in considerazione l'idea di creare giochi per console.


25
Minecraft non è costruito con Java? O principalmente OpenGL? Oh, e controlla C # se non sei impostato al 100% su Java, dato che è fantastico.
Aralox

7
Perché non vieni alla chat Stack Overflow C ++? Adoriamo il C ++, pensiamo che possa assolutamente essere usato nel modo giusto, e sappiamo come farlo, e saremmo totalmente felici di condividerlo.
DeadMG

12
Minecraft è java + LWJGL + capacità di codifica di Notch, quindi dal punto di vista delle prestazioni è TERRIBILE.
MLProgrammer-CiM

3
Che tu sia il tuo gioco di codifica o qualsiasi altra cosa, bloccarti in una sola lingua non ti aiuterà in futuro. Ramifica un po ', o C ++ o qualcos'altro come Python. Ci vuole tempo, ma ti rende un dev migliore.
loganfsmyth

4
Avrai molte informazioni sbagliate perché le guerre Java / C ++ bruciano intensamente, preparati a chiedere esempi specifici prima di accettare un'opinione e anche a cercare di più da solo =) Detto questo, sono d'accordo con @loganfsmyth che dovrai conoscere molte lingue perché solo allora puoi scegliere lo strumento giusto per qualsiasi attività. Nell'immediato futuro, se vuoi semplicemente imparare la "programmazione in stile di gioco", usa quello che ti piace (Java) e poi impara il C ++ in seguito. Cavolo, in seguito potresti creare pipeline di contenuti in C # e giochi in Java ME, difficile da prevedere =)
Patrick Hughes

Risposte:


54

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 facilmente iniziare a sviluppare seriamente i giochi in Java.

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

D'altra parte, con Java hai un paio di problemi.

  1. Netturbino. Come altri hanno già affermato, la gestione della memoria non deterministica è un problema e bisogna tenerlo a mente.
  2. Mancanza di librerie di terzi. La maggior parte delle librerie disponibili non supporta Java. D'altra parte hai sempre la possibilità di chiamare anche queste librerie native da Java, ma è più lavoro farlo. Ci sono anche porte Java o wrapper già pronti disponibili per librerie popolari, ad esempio sto usando JBullet - porta Java della Bullet Physics Library . D'altra parte Java ha un'enorme libreria di classi integrata, che riduce la necessità di librerie di terze parti che non sono legate al gioco. La mancanza di biblioteche non è stata un problema per me, ma posso immaginare che possa essere per gli altri.
  3. Java non è supportato dalle console di gioco più diffuse e per quanto ne so non è facile passare a quelli Java. D'altra parte Android, che è una piattaforma mobile popolare, utilizza una qualche forma di Java. Anche questa è un'opzione, 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. Non aspettarti di ricevere tanto aiuto dagli altri. Non aspettarti di trovare un lavoro nello sviluppo di giochi senza competenze C ++.

40

Non proprio. Ecco la cosa: in primo luogo, c'è molto poco in termini di librerie esistenti per Java rispetto a praticamente tutto ciò che è per C ++.

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

Non ho mai osservato alcun gioco non indie che abbia trascorso un tempo significativo in una lingua che non era stata compilata in codice nativo prima dell'esecuzione, e persino i giochi indie 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 in seguito dovrò imparare C ++, renderebbe difficile il passaggio?

Sì, assolutamente lo farà. Java e C ++ sono molto diversi, nonostante le loro somiglianze sintattiche superficiali. L'esperienza Java non conta praticamente nulla durante l'apprendimento del C ++.

Il gameplay sulla grafica è una scelta praticabile e puoi vederlo nel successo di giochi come Terarria e Minecraft. Ma se hai intenzione di creare grafica srs, non sarà fattibile in Java.


6
+1 da quando ha specificato grafica pesante, gioco veloce senza ritardi.
Joshua Drake,

1
Anche la mancanza di tipi di dati senza segno di Java si oppone. Sì, puoi aggirare il problema, ma non è l'ideale e utilizzerai il codice che non riflette correttamente i dati sottostanti.
Maximus Minimus

@deadmg Il caso è bloccato e sbloccato , ti riferisci ad alcune funzionalità API di DirectX? Puoi dirmi cosa c'è di male nell'avere GC non deterministico.
Quazi Irfan,

Il GC non deterministico può equivalere a far cadere i frame, se si ottiene un brutto arresto la pausa del mondo e blocca le cose più a lungo del tempo necessario per il rendering del frame. In pratica ciò non accade davvero spesso / mai se pianifichi l'utilizzo della memoria, i raccoglitori di JVM possono essere configurati per una pausa bassa (ben entro i limiti di sicurezza per la caduta dei frame). Tuttavia, non è una cosa divertente da affrontare. Alla fine devi restituire quantità significative della produttività che hai guadagnato quando hai lasciato il C ++.
Michael,

2
Un inizio che dovrai riscrivere totalmente.
DeadMG

25

Quindi, sono davvero serio sullo sviluppo del gioco, 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 provo ad imparare, non riesco mai a cogliere gli argomenti.

Se il motivo per cui hai scelto Java è che non riesci a capire il C ++, i tuoi programmi Java non saranno abbastanza veloci per la grafica di alta qualità. L'uso di una lingua di livello superiore dovrebbe essere perché ti rende più produttivo, non perché non puoi capire la lingua di livello inferiore.

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

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 GPU e / o usare gli elenchi di visualizzazione deprecati come Minecraft. Se non capisci la gestione della memoria, non lo farai neanche correttamente.

  2. Gioco veloce senza ritardi: non è un compito facile in nessuna lingua e hai maggiori probabilità di spararti ai piedi in entrambi i modi senza pensarci.

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


Come domanda secondaria, cosa ha sostituito gli elenchi di visualizzazione quando sono stati deprecati?
Suds,

@Suds: pipeline programmabile, credo.
DeadMG


Le piattaforme mobili potrebbero essere considerate console. Mi rendo conto che probabilmente stava parlando dei tre grandi, ma Android usa Java e molti giochi sono stati creati per questo.
Amplifica il

1
@ Amplify91 sì, alcuni giochi sono scritti in Java per Android. Ma la maggior parte dei buoni giochi e probabilmente tutti i giochi con grafica intensiva o multipiattaforma sono scritti in C ++ usando Android NDK.
Coyote,

15

Un programmatore esperto in genere conoscerà molti linguaggi di programmazione - l'apprendimento di linguaggi di programmazione extra non è troppo difficile quando ne conosci bene uno. Tuttavia, raccomanderei caldamente che C ++ non dovrebbe essere la tua prima lingua, e probabilmente neanche la seconda.

Questo perché C ++ ottiene molta della sua efficienza dal non eseguire alcun controllo significativo degli errori di runtime. Ad esempio, l'accesso a un elemento dalla fine di un array in Java genererà sempre un'eccezione che dice al programmatore esattamente cosa non va. In C ++ potresti essere fortunato e si bloccherà immediatamente, ma molto frequentemente eliminerà silenziosamente alcuni altri dati e l'errore non verrà visualizzato molto più tardi .

Ti suggerirei di restare con Java per ora (o passare a C # se lo preferisci). Ciò ti consentirà di eseguire le operazioni più rapidamente rispetto all'utilizzo del C ++ e le prestazioni su un PC non dovrebbero essere un problema.

Pensa all'apprendimento del C ++ dopo aver completato alcuni progetti in lingue più sicure. Il C ++ è ciò di cui hai bisogno per la maggior parte dei lavori di sviluppo di giochi professionali.

Si noti che, ad eccezione del fatto che C # / XNA ottenga almeno un gioco scritto su una console, è necessario creare un'azienda, un ufficio e disporre di un budget elevato per l'hardware di sviluppo e altre spese.


Ciò è anche eccezionalmente vero perché altri linguaggi oltre al C ++ ti daranno un senso di realizzazione. Il C ++ può richiedere centinaia di ore per ciò che non può sembrare nulla. Imparare prima altre lingue ti consente di bagnare i piedi.
Darkenor,

I tuoi commenti sulla gestione della mancanza di errori riguardano in realtà C (e il cosiddetto codice C ++ che in realtà è C). C ++ ha librerie standard (e librerie di template standard) che hanno una gestione degli errori molto migliore di quella che descrivi. C ++ ha anche librerie fornite dal fornitore (come MFC) che forniscono una buona gestione degli errori.
Jasper,

9

Disclaimer: questo non risponde esattamente alla tua domanda. Tuttavia, ho tentato di menzionare (brevemente) alcuni punti che potrebbero interessarti.

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

Java non viene usato di frequente. Minecraft è un gioco piuttosto popolare che lo ha reso grande con Java; ma non è fantastico graficamente. Spiral Knights non è male - realizzato anche in Java, con una grafica significativa.

Se ti piace Java, C # è molto simile nella sintassi, con il vantaggio che può interagire con C ++ - quindi, se necessario, si possono fare cose di basso livello in C ++. Unity può usare C # per gli script e XNA è una scelta eccellente.

Ancora una volta, Java non è ampiamente usato. Se ti piace lo stile e la sintassi, penso che troverai C # un'esperienza di codifica molto simile e molto piacevole.

Spero che i tuoi sogni lo realizzino, è molto divertente lungo la strada :)


8
Molte e molte imprecisioni in questo post. La grafica "cattiva" di Minecraft non è (fortemente) correlata al linguaggio. Le cattive prestazioni di MC sono direttamente correlate al fatto che Java è un linguaggio volgare per i giochi perché GRANDI problemi di prestazioni e LWJGL è una libreria non adatta per grandi progetti di codifica per lo stesso motivo. Ma il fattore più importante è stata la cattiva codifica e implementazione di Notch, che viene risolta ... lentamente. C # offre tutti gli aggiornamenti della memoria gestita senza la maggior parte dei problemi di prestazioni di Java. L'aspetto negativo è che C # è fortemente incentrato su Microsoft sia per i giochi che per le applicazioni.
MLProgrammer-CiM

2
@EfEs: odio interromperti, ma la memoria gestita è terribile per i giochi e le persone che codificano i giochi in XNA devono dedicare più tempo alla gestione della memoria rispetto alle persone che codificano in C ++. La natura non deterministica del CG significa che devi mettere praticamente in comune tutto ed evitare l'allocazione come la peste, non il modo in cui il linguaggio doveva essere usato.
DeadMG

Questa risposta non doveva essere accurata al 100%; Ho citato solo esempi che conosco vagamente. Sentiti libero di DV.
ashes999

2
@DeadMG So che C ++ è la strada da percorrere, stavo solo cercando di spiegare che C # è meglio di Java per i giochi.
MLProgrammer-CiM

5
Essendo uno sviluppatore C # di lunga data (non pensato dagli sviluppatori 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 rantolano nella memoria gestita, nei modelli di progettazione e architettura che devono essere utilizzati e sfruttarli in un linguaggio come Java / C #. Quello che sto cercando di dire non è che le tecniche o i prodotti C / C ++ sono cattivi, ma che anche se usi linguaggi più semplici in termini di sintassi (come Java e C #), hai ancora bisogno di molta esperienza per progettare il tuo gioco nel modo giusto modo.
Ivaylo Slavov

3

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

Se stai scrivendo programmi OO di grandi dimensioni e complessi, li scriverai 5 volte più velocemente in Java che in C ++. Inoltre, la manutenzione sarà notevolmente più semplice. Ho cambiato, (certamente per software non di gioco), e la mia produttività è salita alle stelle. C #, un'altra buona alternativa, è più difficile da imparare rispetto a Java perché c'è molto di più. Quando lo conosci, puoi scrivere codice anche più velocemente che in Java; ti offre molti trucchi. Tuttavia, trovo che questi trucchi possano rendere difficile la manutenzione. E poi c'è il documento Java, che aiuta con le librerie Sun e il tuo vecchio codice. C # non ha nulla 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 un'eternità per i giocatori. Inoltre, mi aspetto di aggiungere molto più tardi, mentre penso che la maggior parte delle persone vada e scriva un nuovo gioco.


3

Senti, la semplice risposta a "È Java fattibile per gli sviluppatori di giochi" è un ovvio sì. Puoi usare qualsiasi linguaggio di programmazione per creare giochi. Ciò non significa che dovresti .

Probabilmente le cose che ti spengono dal C ++ (gestione della memoria di basso livello, nessun garbage collector, dover prestare attenzione a puntatori, strutture come array, ecc.) Sono le cose che dovresti imparare se vuoi sfruttare le risorse di un computer 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 dell'array) che lo rendono solo più lento. In questo codice di esempio di rumore Java Perlin ottimizzato, l'autore ha commentato "(l'accesso all'array è molto più lento dell'accesso dei membri)". Questo genere di cose è piuttosto intuitivo proveniente da uno sfondo C ++. Ma in Java, cose del genere lo sono.

Dico smettere di schivare il proiettile, imparare il C ++ e usarlo.


1

Dovresti farlo nella lingua che conosci meglio fino a quando non puoi permetterti un'istruzione formale (Laurea in Scienze?) In Informatica, sottolineando il design del gioco. Potresti usare il tuo gioco per ottenere una borsa di studio, soprattutto se puoi dire "Ho fatto questo senza alcun addestramento formale in Java"

Le moderne JVM, anche quella di Oracle, hanno molte, molte funzionalità per rispondere alle 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. L'analisi di escape ora consente l'eliminazione dei blocchi e l'allocazione molto più rapida / trascurabile di oggetti di breve 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 rovinare il più facilmente mallocpossibile 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 l'IDE. Puoi usarli per rintracciare i problemi di prestazioni e imparare .


5
L'educazione formale in CS vale merda jack per le effettive abilità di programmazione in qualsiasi disciplina. Lo saprei, sono al mio terzo anno.
DeadMG

4
Decisamente in disaccordo con DeadMG. Dopo essermi laureato e scelto corsi che mi piacciono, CS ha portato i miei poteri di sviluppo del gioco dal 10% al 100%. Non mi ha insegnato l'interfaccia utente, l'iconografia, ecc. Ma la codifica reale e reale.
ashes999

2
@ ashes999: Allora sei stato fortunato. Il mio corso è inutile e so che ce ne sono molti altri che provano la stessa cosa.
DeadMG

2
@DeadMG è difficile vedere quando studi. Una volta che lavori un paio d'anni F / T e impari altre abilità gratuite, vedrai. L'ho fatto. Ma forse ho solo prestato molta attenzione e ho cercato di applicare tutto al mio hobby di sviluppo del gioco.
ashes999,

1
Direi che dipende dalla scuola e dal professore. Ho tenuto alcune ottime lezioni di programmazione dove ho imparato un sacco; e ne avevo alcuni in cui sentivo di aver perso conoscenza partecipando. È tutto avere un buon professore o no. IMO.
Nate,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.