Perché Java non è più ampiamente utilizzato per lo sviluppo di giochi? [chiuso]


78

Non sono uno sviluppatore di giochi o altro, ma so che Java non è molto utilizzato per lo sviluppo di giochi. Java dovrebbe essere abbastanza veloce per la maggior parte dei giochi, quindi dov'è il problema? Posso pensare ad alcuni motivi:

  • Mancanza di sviluppatori di giochi con esperienza in Java
  • Mancanza di buone strutture di sviluppo del gioco
  • I programmatori non vogliono accettare Java come linguaggio di programmazione dei giochi. La maggior parte accetta solo C ++ come quello?
  • Nessun supporto per console di gioco (anche se il mercato dei PC esiste ancora)

Ovviamente potrebbe essere qualcos'altro. Qualcuno che conosce il business meglio di me potrebbe spiegare perché Java non sta ottenendo slancio quando si tratta di sviluppo di giochi?


37
E ora aspetta tutte le risposte "Java è lento, C ++ è veloce" che toccano davvero solo la superficie del problema in un modo eccessivamente ampio e completamente corretto. Tieni presente che le persone che rispondono in questo modo non sono quasi certamente sviluppatori di giochi professionali.
Ed S.

20
In effetti, Java viene utilizzato per lo sviluppo del gioco; vale a dire nel mercato mobile. Java ME, Android.
user281377

21
Perché dovrebbe essere usato? Cosa offre Java a uno sviluppatore di giochi che le lingue più utilizzate non hanno? Java fornisce un ecosistema estremamente ricco agli sviluppatori di applicazioni aziendali, che supera le sue carenze come linguaggio, ma quando si tratta di sviluppo di giochi, la piattaforma Java offre piccoli strumenti rispetto a una serie di alternative.
back2dos

14
È interessante notare che Minecraft è basato su Java.
Uri

5
@Coder Sembra che il codice C ++ sia stato fortemente ottimizzato, ma non il codice Java. Quindi è un confronto non valido.
Izkata,

Risposte:


95

Diverse ragioni:

  • Ai vecchi tempi, era necessario un "accesso diretto" per le prestazioni e l'interfaccia utente. Questo precede i linguaggi VM come Java e C #.
  • La maggior parte delle console (ad esempio 360, PS3) non dispongono di una JVM, quindi non è possibile riutilizzare il codice dalla versione PC. È molto più semplice compilare il codice C ++ per supportare vari dispositivi.
  • La maggior parte dei motori di gioco tradizionali (ad es. Unreal) hanno attacchi C ++. Ci sono alcuni connettori Java (ad esempio, per OpenGL) ma niente di simile.
  • Per i giochi per PC, DirectX non ha davvero un forte supporto Java (se non del tutto).
  • I giochi basati sul Web funzionano in JavaScript o Flash. Potresti scriverli in Java anche usando cose come GWT.
  • L'iPhone esegue una variante Objective-C.

Oggigiorno Java viene utilizzato principalmente nei giochi Android, semplicemente perché è la lingua principale per quella piattaforma.


14
+1 "La maggior parte delle console (ad esempio 360, PS3) non dispongono di una JVM, quindi non è possibile riutilizzare il codice dalla versione PC. È molto più semplice compilare il codice C ++ per supportare vari dispositivi" Se il dispositivo non ha il runtime , non vedrai giochi sviluppati in base a quel runtime non disponibile. Xbox 360 e Windows Phone hanno gestito i runtime .Net, quindi lo sviluppo di giochi che li utilizza è possibile e probabilmente una tendenza in crescita. Tuttavia, poiché il runtime non è sulle altre piattaforme principali (PS3 e, in misura molto minore, Wii), è difficile giustificare una base di codice completamente separata. Non è davvero un problema di prestazioni.
Giustino,

2
Si chiama XNA, che attualmente è un sottoinsieme del framework .Net 2.0. Ci sono alcuni altri framework interessanti in natura: MonoXNA, MonoTouch e XnaTouch, tra gli altri.
Giustino,

7
La prevedibilità delle prestazioni non è possibile con una JVM.
Klaim,

5
Punti molto buoni. Tuttavia, aggiungerei il fatto che il GC può causare pause / carichi imprevedibili. Se questo non è un problema per le app del server, è per un gioco in tempo reale. Questo è ad esempio visibile in Minecraft.
deadalnix,

2
@Klaim Non è nemmeno possibile con malloco new, quindi se è un problema implementerai il pooling, qualunque cosa accada . Non correlato a quel punto, un grosso problema con Java è che non supporta i tipi di valore, a differenza di C #.
Doval,

80

Motivi tecnici:

  • La maggior parte dei migliori motori di gioco 3D sono scritti in C / C ++. Questo è un grosso problema, dal momento che la maggior parte degli sviluppatori di giochi non vuole scendere a compromessi sul proprio motore 3D, ma non vuole nemmeno scriverne uno da zero. Java ha jMonkeyEngine che è open source e in realtà davvero buono ma non può ancora competere con Unreal Engine .
  • Per alcune situazioni molto rare, ci sono vantaggi nell'avvicinarsi al "metallo" in linguaggio C o assembly, in particolare per l'accesso a funzioni hardware speciali. Questo non è così importante al giorno d'oggi, ma agli sviluppatori di giochi professionali piace ancora avere l'opzione .....
  • Java ha una garbage collection , runtime gestito. Il 99% delle volte questo è un enorme vantaggio, rende sicuramente la codifica più semplice e meno soggetta a errori ed è uno dei grandi motivi per cui Java è così popolare. Tuttavia, provoca un problema di latenza occasionale per i giochi poiché i cicli di raccolta dei rifiuti possono causare pause evidenti. Questo sta diventando un problema minore con le nuove JVM a bassa latenza, ma è ancora un problema per i giochi graficamente intensivi in ​​cui è fondamentale mantenere un FPS elevato.

Motivi non tecnici:

  • Le case di sviluppo di giochi professionali sono fortemente investite in competenze e tecnologie C / C ++. Questo crea un'enorme quantità di inerzia .
  • La percezione in gran parte irrazionale che Java sia lento. Forse vero negli anni '90, sicuramente non vero ora - puoi sicuramente scrivere un gioco 3D commerciale redditizio con Java ( Runescape qualcuno? O che ne dici di Minecraft ?)
  • Una percezione abbastanza equa che Java sia più focalizzato sulle applicazioni aziendali e sul Web piuttosto che sui giochi. Ciò potrebbe cambiare con la crescita di Mobile e la necessità di un maggiore sviluppo multipiattaforma, ma al momento è certamente vero.

È interessante notare che ci sono anche alcuni buoni motivi per cui gli sviluppatori di giochi dovrebbero considerare Java:

  • Portabilità : con il proliferare del numero di piattaforme target, Java diventa sempre più attraente con la sua capacità praticamente senza pari di creare binari realmente multipiattaforma
  • Ecosistema di librerie - con l'eccezione molto importante dei motori di gioco 3D, Java ha la migliore gamma di librerie in assoluto di qualsiasi piattaforma. Networking, audio, intelligenza artificiale, elaborazione delle immagini, archivi di dati chiave / valore, assegni un nome all'argomento e probabilmente c'è una libreria Java open source per questo.
  • Sviluppo lato server - Java è una grande lingua / piattaforma per il server e poiché più giochi incorporano massicciamente elementi multi-player, il lato server diventerà sempre più importante. Java su Linux sembra piuttosto avvincente qui come piattaforma.
  • La JVM - è probabilmente il miglior ambiente di esecuzione di VM progettato al mondo, con una fantastica garbage collection, compilatore JIT, supporto per la concorrenza ecc. Andrà solo meglio, e man mano che gli sviluppatori di giochi iniziano sempre più a usare linguaggi dinamici all'interno dei loro giochi, vorranno il miglior ambiente di runtime possibile.
  • Altri linguaggi JVM : Java è un solido cavallo di battaglia, ma la vera innovazione sta avvenendo con i nuovi linguaggi JVM (Scala, Clojure in particolare). Questi linguaggi ottengono tutti i vantaggi della piattaforma Java / JVM, inoltre sono linguaggi moderni estremamente potenti.

19
No, la protezione non è migliore in Java nel mondo dei videogiochi. La maggior parte delle console non ha una JVM. Per motivi di portabilità, C ++ è preferito a java nel mondo dei videogiochi.
deadalnix,

5
Perché l'ecosistema della biblioteca è un bonus per Java? Networking, suono, coppie chiave-valore - non è una cosa; oggi è disponibile ovunque. Direi che l'elaborazione dell'IA e delle immagini è molto più semplice con le librerie C / C ++ (fann, OpenCV).
MrFox,

4
Più importante dell'FPS, vorrei forse enfatizzare frame rate costanti . Posso far funzionare il mio gioco a 100FPS, ma se alcuni di quei fotogrammi impiegano mezzo secondo, semplicemente non lo farà. Anche se GC è veloce, se causa irregolarità evidenti è ancora un problema. (Questo non parla in particolare delle prestazioni di Java, solo un problema generale da tenere a mente)
Gankro

1
Ho scritto uno sparatutto in prima persona in Java e non ho mai avuto problemi con il garbage collector anche quando non ne ho usato uno a bassa latenza. Ad ogni modo, quando la memoria non è allocata sull'heap Java, spetta a me occuparmene senza il garbage collector e la maggior parte della mia impronta di memoria proviene dai VBO. In altri termini, la garbage collection non è un problema perché funziona quando viene utilizzata per quello per cui è stata progettata e non dipende da essa gestire oggetti di grandi dimensioni sulla GPU o sull'heap nativo (! = Heap Java). Non incolpare un'incudine per non essere un mezzo efficace per lavarti i denti.
gouessej,

1
@deadalnix Il mondo dei videogiochi non è solo composto da console.
gouessej,

27

Va bene, c'è molta disinformazione in questo thread.

Conosco molto bene il business dei videogiochi , da 25 anni. Conosco Java molto bene nei giochi, essendo stato l'evangelista tecnico di Sun Java Game ed essendo stato esperto di programmazione delle prestazioni Java.

In termini di velocità computazionale, Java batte oggi il C ++ in molti benchmark di calcolo scientifico. Puoi scrivere un codice patologico in entrambe le lingue che funziona male se vuoi, ma soprattutto, sono alla pari e lo sono da molto tempo.

In termini di utilizzo della memoria, Java ha alcune spese generali. HelloWorld è un programma 4K in Java. Ma quel sovraccarico è piuttosto insignificante nei sistemi multi GB di oggi. Infine, Java ha più tempo di avvio. Non consiglierei di usare Java per utility di runtime di breve durata come i comandi da riga di comando Unix. In questi casi, l'avvio avrà la meglio sulle tue prestazioni. In un gioco, tuttavia, è abbastanza insignificante.

Il codice di gioco Java correttamente scritto non subisce pause GC. Proprio come il codice C / C ++, richiede una gestione della memoria attiva ma non al livello C / C ++. Fintanto che si mantiene l'utilizzo della memoria su oggetti di lunga durata (persistere per un intero livello o gioco) e oggetti di durata molto breve (vettori e simili, passati in giro e rapidamente distrutti dopo il calcolo) gc non dovrebbe essere un problema visibile.

In termini di accesso diretto alla memoria, Java lo ha da molto tempo; da Java 1.4 sotto forma di buffer di byte diretti nativi. La manipolazione dei bit in Java può essere leggermente fastidiosa a causa della mancanza di tipi interi senza segno, ma i round di lavoro sono tutti ben noti e non terribilmente onerosi.

Mentre il suo vero Java non ha mai avuto un binding Direct3D, ciò è dovuto al fatto che le tecnologie Java puntano alla portabilità. Ha DUE collegamenti OpenGL (JOGL e LWJGL) e OpenAL (JOAL) e un collegamento di input portatile (JInput) che si lega sotto il cofano a DirectInput su Windows, HID Manager su OSX e un collegamento Linux (dimentico quale).

È vero che nessun motore di gioco completo ha descritto Java come, ad esempio, Unity, ha caratterizzato C # e questo è un punto debole nello spazio indipendente. D'altra parte, c'erano due buoni APIS a livello di Scenegraph che erano totalmente portatili su piattaforma Windows, OSX e Linux. Entrambi scritti da Josh Slack, il primo si chiamava motore JMonkey e il secondo Ardor3D.

Il poster in alto ha ragione che le due cose più importanti che hanno trattenuto Java nello sviluppo del gioco sono il pregiudizio e la portabilità. Quest'ultimo è stato il problema più grande. Sebbene tu possa scrivere un gioco Java e spedirlo su Windows, OSX e Linux, non c'è mai stata una console virtuale. Ciò era dovuto alla totale inettitudine nella gestione intermedia di Sun. Pochi di noi che lavorano su Java nei giochi in realtà hanno avuto accordi con Sony non meno di 3 volte per ottenere una VM su una Playstation e tutte e 3 le volte la gestione intermedia di Sun l'ha uccisa.

Mentre Sun flirtava con le tecnologie client, il fatto è che la gestione Sun non ha mai ottenuto prodotti di consumo. Ecco perché Java come linguaggio client di Sun non è mai riuscito in nessuna forma e perché ci sono voluti Google e Dalvik (la macchina virtuale simile a Java Android) per rendere Java un successo piattaforma ovunque.

Ed è per questo che oggi codifico i giochi in C #. Perché Mono è andato dove la direzione di Sun si è rifiutata.


8

Java è ottimo per la logica aziendale, i server e il codice indipendente dalla piattaforma che deve essere eseguito in modo affidabile. Esistono diversi fattori per cui Java non viene spesso utilizzato nei giochi:

  • controllo dei limiti e altri meccanismi di sicurezza (differenza di prestazione marginale in questi giorni)
  • dover convertire tra strutture di dati C ++ e strutture di dati Java (non si può semplicemente copiare la memoria tra i buffer)
  • molti libri e tutorial seguono la folla, quindi è difficile trovare informazioni sugli sviluppatori di giochi non C ++
  • le librerie grafiche di base (DirectX e OpenGL) e molti motori standard sono basati su C / C ++
  • molti giochi provano a funzionare il più velocemente possibile in modo da poter aggiungere funzionalità visivamente più interessanti

Non è facile lavorare con le librerie C ++ da linguaggi bytecode come Java (scrivendo un livello JNI) e .net (molti marshalling / unmarshalling, attributi api / struttura). Quindi aggiunge un bel po 'di lavoro per pochi benefici.

Una nota a margine: alcuni server di gioco utilizzano Java.

Post simile qui : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java


Non devi scrivere JNI da solo, basta usare JogAmp o una libreria simile.
gouessej,

Buon punto. Ho usato JOGL e JMonkeyEngine in Java. Più recenlty in ho usato XNA / MonoGame per DirectX e OpenTK per OpenGL con nvorbis / naudio / openal in C #. E funzionano alla grande per i giochi di piccole e medie dimensioni, specialmente quando si lavora con shader. Grande miglioramento della produttività rispetto al C ++. Quindi il tuo unico vero problema è lo stesso di qualsiasi linguaggio basato su GC: prevenire / mitigare il GC. Bloccerà periodicamente il tuo framerate, quindi avrai bisogno di array di dimensioni fisse, allocazioni statiche o buffer di lunga durata che possono essere lanciati quando il gameplay è bloccato (menu, caricamento, filmati).
Graeme Wicksted,

Ho usato JOGL dal 2006 e non ho avuto questo tipo di problema anche su hardware di fascia bassa in ambiente desktop. Il garbage collector non è da biasimare perché gli oggetti più grandi si trovano spesso nella RAM GPU o nell'heap nativo (in genere i buffer NIO diretti), il primo non è gestito dalla garbage collection "normale" e il secondo non è ' gestito direttamente dalla "normale" garbage collection in quanto si occupa degli oggetti Java nell'heap Java. Spetta allo sviluppatore liberare in modo efficiente la memoria allocata sull'heap nativo.
gouessej,

Secondo la mia modesta opinione, il problema deriva piuttosto da alcune "ottimizzazioni" immaginate da programmatori non in una mentalità Java che impediscono al garbage collector di fare il suo lavoro. Se si mantengono forti riferimenti su alcuni oggetti Java inutili collegati ad alcune risorse native, il Garbage Collector non li considererà mai recuperabili. L'allocazione off-heap può essere utile in alcuni casi, ma se ne abusi, le tue risorse di lunga durata rimarranno nella memoria e non sarai in grado di creare nuovi oggetti.
gouessej,

Alcuni programmatori di giochi preferiscono allocare enormi buffer all'inizio, tagliandoli in fase di runtime e gestendo da soli questa memoria, ma probabilmente faranno peggio del sistema operativo e quindi Java impiegherà molto tempo per liberare spazio per creare nuovi oggetti. Evitare la perdita di memoria non è più difficile in Java e una soluzione più praticabile consiste nel tracciare solo gli oggetti la cui memoria non è allocata sull'heap Java per rilasciarli al momento opportuno (durante una pausa, quando si passa da un livello a un altro) , ...), non ha nulla a che fare con il Garbage Collector.
gouessej,

5

Java non è abbastanza veloce per la maggior parte dello sviluppo di giochi. È molto più lento rispetto all'uso di C ++ / Assembly, che è lo standard. È la stessa ragione per cui lo sviluppo di un altro gioco non viene eseguito usando C # o VB. Gli sviluppatori di giochi hanno bisogno e pianificano ogni ultimo ciclo di clock su cui possono mettere le mani per cose come i calcoli della fisica, la logica dell'intelligenza artificiale e le interazioni ambientali.

Per i giochi più semplici, Java potrebbe essere usato in modo abbastanza efficace. Se si desidera creare un clone di Tetris o Bejeweled o qualcos'altro di quel livello di dettaglio, Java funzionerebbe perfettamente. Ma Java non può assolutamente creare giochi come Halo, Medal of Honor, Command & Conquer e così via e renderlo giocabile. Almeno come esiste oggi.

E anche i motivi che elenchi nella tua domanda sono validi. Tranne, credo, per la mancanza di sviluppatori di giochi con esperienza Java. Molti giochi su telefoni e altri dispositivi portatili sono scritti in Java (inclusa la maggior parte dei giochi Android) e alcuni giochi sono piuttosto eccellenti. Quindi penso che ci sia una base decente e in crescita di sviluppatori di giochi con conoscenza Java.

Il pensiero sta cambiando la capacità di usare questi linguaggi di livello superiore per alcuni dei giochi più avanzati. Ad esempio, uno dei miei giochi preferiti, Auran's Train Simulator, è scritto con grandi porzioni in C # e funziona abbastanza bene. Quindi la base sta crescendo e continuerà ad evolversi.


17
Lascia fuori uno dei punti più importanti; la stragrande maggioranza degli strumenti e dell'API da utilizzare sono scritti in C ++ e riscriverli per lavorare con Java o qualsiasi altro linguaggio sarebbe un sacco di lavoro. Inoltre, la tua generalizzazione secondo cui "[Java è] molto più lento dell'uso di C ++ / Assembly " è troppo ampia per essere accurata. Assembly non viene usato tutte le volte che potresti pensare nei giochi per PC perché un buon compilatore genererà probabilmente un codice più efficiente di quello che scriverai assemblatore. Tuttavia, è necessario l'uso delle risorse deterministico e la capacità di ottenere direttamente l'hardware.
Ed S.

15
Qualcuno ha davvero bisogno di creare un esempio migliore delle capacità di Java rispetto a Minecraft. Fino a quando qualcuno non sarà in grado di creare l'equivalente di WoW o C&C o MOH o Starcraft in Java o C #, continuerò a mantenere ciò che ho detto.
BBlake

12
"L'assembly non viene usato tutte le volte che potresti pensare nei giochi per PC perché un buon compilatore genererà probabilmente un codice più efficiente di quello che scriverai assemblatore" Questa è un'altra generalizzazione. Devo ancora vedere un compilatore che può generare un linguaggio macchina IA32 migliore di un programmatore esperto di linguaggio assembly IA32. I compilatori generano codice per una macchina astratta mappata su una macchina target. Un programmatore di linguaggio assembly sfrutta appieno il processore sottostante, compresi gli idiomi della macchina.
bit-twiddler

10
Non dimenticare l'utilizzo della memoria. L'uso della memoria è probabilmente più importante della velocità. Java non è progettato per il controllo diretto della memoria come C ++ e Garbage Collector significa che l'utilizzo della memoria è sempre significativamente superiore a C ++ per la stessa attività.
Matteo Leggi il

9
Questo non è il 1985. Abbiamo più di 640k di memoria, migliori dei processori da 50 mghz e più di 1,44 mbs di memoria rimovibile. La sfida degli sviluppatori di giochi oggi non è la stessa di 25 anni fa. Vai avanti e trova un esempio di codice x86 / o ia64 realizzato a mano per un gioco moderno. Alcuni miti sono semplicemente sbagliati. La sfida è la portabilità e i client di livello inferiore che utilizzano ambienti operativi relativamente antichi. Il minimo comune denominatore rispetto a un'impressionante inversione.
Giustino,

5

I giochi moderni hanno a che fare con la grafica 3D che si svolge in hardware per scopi speciali.

Già nel 2002, Jacob Marner ha scoperto nel suo rapporto "Valutazione di Java per lo sviluppo di giochi" che Java era abbastanza utilizzabile per i giochi, ad eccezione delle parti maggiormente dipendenti dalle prestazioni, e a causa della solidità del linguaggio e della JVM sottostante che era più economico per farlo in questo modo.

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

È mia opinione personale che con i progressi che sono avvenuti da allora, specialmente nella grafica 3D, e con gli eccellenti legami con OpenGL e altri, questo svantaggio è molto meno pronunciato in questi giorni.

Quindi il problema deve essere altrove. Un probabile motivo è la dimensione del runtime Java (che è molto meno un problema in questi giorni con i giochi multi-DVD), e un altro l'inerzia del codice esistente. È notoriamente fragile iniziare a lavorare con il codice nativo in Java. Un terzo motivo è ciò che gli sviluppatori stellari che fanno i giochi hanno familiarità. Un quarto è se Java è disponibile sulla piattaforma.

Una cosa è certa, però: la maggior parte dei giochi sta diventando scriptabile invece di avere tutto masterizzato in codice C dall'inizio, e vuoi il miglior runtime sotto il tuo linguaggio di scripting. Oggigiorno ciò significa essenzialmente o CLR o JVM.


1
oddlabs.com/technology.php - "Abbiamo basato il nostro sviluppo sulla combinazione di LWJGL e Java, che consente al gioco di funzionare su qualsiasi piattaforma supportata da LWJGL senza modifiche e ad una velocità paragonabile al codice nativo dipendente dalla piattaforma."

Jake2 ha superato Quake2 più di 10 anni fa. Non siamo più nel 2002.
Gouessej,

4

Agli sviluppatori di giochi piace essere vicini al metal e spesso scriveranno i loro anelli interni stretti in assemblea. Java non offre lo stesso livello di prestazioni possibili, sia in termini di velocità costante che di utilizzo della memoria (l'esecuzione di un JIT ne risente).


4

Penso che il fattore limitante per la maggior parte delle persone sia la (mancanza di) disponibilità di buoni motori di gioco. Per andare molto lontano, dobbiamo vedere perché quelli non sono disponibili.

Lo guarderei dall'altra direzione per un momento. Lo sviluppo di un motore di gioco (ad esempio) richiede molto lavoro. Chi trarrebbe beneficio abbastanza dallo sviluppo di uno per investire il tempo e gli sforzi per farlo?

La maggior parte dei candidati ovvi per lo sviluppo simile a un framework in / per Java (ad es. IBM, Oracle) sembra non avere alcun interesse per i giochi. I candidati ovvi per lo sviluppo del gioco (ad esempio, Id, EA) sembrano avere quasi altrettanto poco interesse per Java.

Quasi l' unico candidato a cui riesco a pensare che sembra assolutamente ragionevole sarebbe Google. Il linguaggio di sviluppo principale per Android è Java e l'incoraggiamento dello sviluppo di giochi per Android potrebbe offrire un vero vantaggio per la piattaforma.

Per quanto ne so, non l'hanno fatto (ancora?), Il che lascia alcuni limiti piuttosto severi per quasi tutti gli altri. Senza i mezzi moderni, i motori di gioco ad alte prestazioni per utilizzare lo sviluppo su Java significano un bel po 'di lavoro extra, con (quello che mi sembra) poche prospettive per produrre molti benefici in cambio di quel lavoro extra.


Penso che tu abbia riscontrato un problema importante con i motori di gioco - penso che questo sia il motivo principale per cui Java non ha raggiunto C / C ++. È possibile che l'open source possa livellare un po 'il campo di gioco: sono rimasto molto colpito da jMonkeyEngine ( jmonkeyengine.com ).
Mikera,

e non dimenticare che gli sviluppatori di giochi sono estremamente conservatori nel complesso (tecnicamente), e la maggior parte dei grandi (influenti) negozi esistono da decenni e sono incentrati su C (++) / ASM, quindi non investiranno nello sviluppo di Java poiché significherebbe ingenti investimenti di tempo, denaro e altre risorse in anticipo quando hanno un'intera architettura C (++) / ASM pronta a partire.
jwenting il

1

La domanda è alla pari di chiedere qualcosa del tipo:

Cosa c'è di meglio per alimentare la tua auto, un motore per barche o un motore a reazione.

Si tratta di scalabilità, prevenzione degli errori, velocità, firma di memoria, modularità e tutta una serie di cose. La domanda non dovrebbe riguardare ciò che è meglio come standard del settore, la domanda dovrebbe essere "ciò che è meglio per me" come in ciò che sai o quanto bene lo sai. Se fa il lavoro, allora fa il lavoro, se puoi effettivamente vendere l'idea, allora funziona e chissà che potresti anche piegare alcuni cucchiai.


0

Java non è stato creato pensando allo sviluppo del gioco, Java è stato creato per essere un linguaggio "per il web".

Per quanto riguarda lo sviluppo del gioco, Sun non supportava Java come linguaggio di sviluppo del gioco poiché Microsoft supportava C #.

Penso che la mancanza di avvincenti framework di sviluppo del gioco sia ciò che ha davvero ucciso Java in questo aspetto.


3
Ma il C ++ non è stato nemmeno creato come linguaggio di gioco, ma come linguaggio di programmazione di sistemi proprio come C. E Sun ha effettivamente fatto qualche sforzo su Java come linguaggio di gioco, penso che stessero collaborando con Sony per portare Java su PS2 o qualcosa, ma non è mai successo ...
Anto

1
@Phobia: Ma è stato progettato per la programmazione di sistemi.
Anto

1
@Phobia: sto dicendo che è un linguaggio di programmazione generico , proprio come C ++. Nella tua risposta affermi che Java non è stato progettato come un linguaggio di programmazione del gioco, ma dimentichi che C ++ non è nemmeno progettato in questo modo.
Anto,

2
@Joe Blow: Dalla pagina Wikipedia su C: "Sebbene C sia stato progettato per implementare software di sistema , è anche ampiamente usato per lo sviluppo di software per applicazioni portatili". Penso che sia abbastanza chiaro, no?
Anto

2
@Phobia Mi dispiace per le tue preferenze personali ma sono completamente irrilevanti per la discussione. Inoltre, non voglio contestare che oggigiorno il C ++ sia usato quasi esclusivamente nella programmazione delle applicazioni. Non è di questo che tratta questa discussione. La tua affermazione che Java è stato progettato pensando alla programmazione web. Bene, il C ++ è stato progettato pensando alla programmazione dei sistemi. Dice il suo designer. Fine della discussione.
Konrad Rudolph,

-1

È più facile incollare C direttamente sui nuovi hardware e driver non convenzionali. Quanto prima e più un programmatore di giochi può accedere all'hardware, tanto meglio può superare i giochi concorrenti. I programmatori di giochi successivi si limitano a seguire la stessa metodologia e gli stessi strumenti dei precedenti giochi collaudati.

Per i giochi in cui l'ottimizzazione per l'hardware più recente è meno importante, come i giochi per telefoni cellulari casuali, l'utilizzo di C in questo modo è meno importante della maggiore portabilità di Java.


-4

Per alcune persone la ragione non ha nulla a che fare con la velocità, le librerie o la disponibilità. È semplicemente a causa della lingua stessa. Ad alcune persone semplicemente non piace Java la lingua. Altre persone preferiscono usare il loro linguaggio di programmazione preferito invece di usare Java per creare giochi.


questo sembra più un commento, vedi Come rispondere
moscerino

-8

Ovviamente potrebbe essere qualcos'altro. Qualcuno che conosce il business meglio di me potrebbe spiegare perché Java non sta ottenendo slancio quando si tratta di sviluppo di giochi?

È un linguaggio interpretativo, cioè lento. Hai a che fare con una scheda grafica e grafica che è hardware. Qual è un buon linguaggio per gestire l'hardware? Bene C ++, è piuttosto basso, e hai a che fare con puntatori e quant'altro.

Se vuoi pompare una grafica folle come Crysis e qualunque cosa tu non abbia intenzione di fare Java per questo.

Non solo, Oracle possiede Java, il pensiero che un'azienda possa farti causa non va bene in grassetto. Soprattutto quando vuoi creare il tuo interprete personale per JAVA per indirizzare i giochi senza essere denunciato a causa della frammentazione del FUD.


1
Dovresti leggere seriamente la compilazione di JIT e guardare alcuni parametri di riferimento in cui Java è messo contro C ++
Anto

1
Chi diavolo ha votato questa risposta? Tutta questa domanda sta diventando incredibilmente ridicola! Santo cielo.
Fattie,

7
@Joe La risposta è sbagliata. Java non è interpretato.
Konrad Rudolph,

3
@Anto Dimentica quegli sciocchi benchmark. Il C ++ è ordini di grandezza più veloci di Java dove conta, vedi programmers.stackexchange.com/questions/29109/29136#29136 e programmers.stackexchange.com/questions/368/13888#13888 .
Konrad Rudolph,

1
@Anto Cosa dovrei guardare? Velocità? C ++. Utilizzo della memoria? C ++. Guarda minecraft e prova ad ospitare un server e vedi quanta memoria sta occupando il gioco. Java consuma molta più memoria rispetto al C ++. Fare un gioco online, immagino sia piuttosto difficile in Java. Ogni benchmark che ho visto finora Java consuma più memoria, ora avere un gioco mmorpg in cui il server centrale è codificato in Java suona bene solo se si ignora l'aspetto della memoria o si modifica la definizione di massiccio in MMORPG.
mitico
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.