¿Por qué Java no se usa más ampliamente para el desarrollo de juegos? [cerrado]

77

No soy desarrollador de juegos ni nada, pero sé que Java no se usa mucho para el desarrollo de juegos. Java debería ser lo suficientemente rápido para la mayoría de los juegos, entonces, ¿dónde está la trampa? Se me ocurren algunas razones:

  • Falta de desarrolladores de juegos con experiencia en Java
  • Falta de buenos marcos de desarrollo de juegos
  • Los programadores no quieren aceptar Java como lenguaje de programación de juegos. ¿La mayoría solo acepta C ++ como eso?
  • No hay soporte para consolas de juegos (aunque el mercado de PC todavía existe)

Por supuesto, podría ser otra cosa. ¿Podría alguien que conoce el negocio mejor que yo explicar por qué Java no está ganando impulso en lo que respecta al desarrollo de juegos?

Anto
fuente
37
Y ahora espere todas las respuestas "Java es lento, C ++ es rápido" que realmente solo tocan la superficie del problema de una manera demasiado amplia y completamente correcta. Tenga en cuenta que las personas que responden de esta manera seguramente no son desarrolladores de juegos profesionales.
Ed S.
20
De hecho, Java se usa para el desarrollo de juegos; es decir, en el mercado móvil. Java ME, Android.
user281377
21
¿Por qué debería ser usado? ¿Qué ofrece Java a un desarrollador de juegos que los lenguajes más utilizados no tienen? Java proporciona un ecosistema enormemente rico a los desarrolladores de aplicaciones empresariales, que supera sus deficiencias como lenguaje, pero cuando se trata del desarrollo de juegos, la plataforma Java ofrece pequeñas herramientas en comparación con una serie de alternativas.
back2dos
14
Curiosamente, Minecraft está basado en Java.
Uri
55
@Coder Parece que el código C ++ estaba muy optimizado, pero el código Java no. Entonces es una comparación no válida.
Izkata

Respuestas:

94

Muchas rasones:

  • En los viejos tiempos, necesitabas "acceso directo" para el rendimiento y la interfaz de usuario. Esto es anterior a los lenguajes VM como Java y C #.
  • La mayoría de las consolas (por ejemplo, 360, PS3) no tienen una JVM, por lo que no puede reutilizar el código de la versión para PC. Es mucho más fácil compilar código C ++ para admitir varios dispositivos.
  • La mayoría de los motores de juego convencionales (p. Ej., Unreal) tienen enlaces C ++. Hay algunos conectores Java (por ejemplo, para OpenGL) pero nada parecido.
  • Para juegos de PC, DirectX realmente no tiene un fuerte soporte de Java (si es que lo tiene).
  • Los juegos basados ​​en web se ejecutan en JavaScript o Flash. Podrías escribirlos en Java usando cosas como GWT.
  • El iPhone ejecuta una variante Objective-C.

Java se usa principalmente en juegos de Android en estos días, simplemente porque es el idioma principal de esa plataforma.

Uri
fuente
14
+1 "La mayoría de las consolas (por ejemplo, 360, PS3) no tienen una JVM, por lo que no puede reutilizar el código de la versión para PC. Es mucho más fácil compilar el código C ++ para admitir varios dispositivos" Si el dispositivo no tiene el tiempo de ejecución , no verá juegos desarrollados en función de ese tiempo de ejecución no disponible. Xbox 360 y Windows phone han gestionado tiempos de ejecución .Net, por lo que el desarrollo de juegos con ellos es posible y probablemente una tendencia creciente. Sin embargo, debido a que el tiempo de ejecución no está en las otras plataformas principales (PS3, y en mucho menor medida, Wii), es difícil justificar una base de código completamente separada. Realmente no es un problema de rendimiento en absoluto.
JustinC
2
Se llama XNA, que actualmente es un subconjunto del marco .Net 2.0. Hay algunos otros marcos interesantes en la naturaleza: MonoXNA, MonoTouch y XnaTouch, entre otros.
JustinC
77
La previsibilidad del rendimiento no es posible con una JVM.
Klaim
55
Muy buenos puntos. Sin embargo, agregaría el hecho de que el GC puede causar pausas / cargas impredecibles. Si esto no es un problema para las aplicaciones de servidor, es para un juego en tiempo real. Esto es visible, por ejemplo, en Minecraft.
deadalnix
2
@Klaim Tampoco es posible con malloco new, así que si eso es una preocupación, implementará la agrupación sin importar qué. Sin relación con ese punto, un gran problema con Java es que no admite tipos de valor, a diferencia de C #.
Doval
80

Razones técnicas:

  • La mayoría de los mejores motores de juegos 3D están escritos en C / C ++. Esto es un gran problema, ya que la mayoría de los desarrolladores de juegos no quieren comprometer su motor 3D, pero tampoco quieren escribir uno desde cero. Java tiene jMonkeyEngine, que es de código abierto y realmente bueno, pero aún no puede competir con el motor Unreal .
  • Para una situación muy rara, hay ventajas en acercarse al metal en lenguaje C o ensamblador, específicamente para acceder a funciones especiales de hardware. Esto no es tan importante hoy en día, pero a los desarrolladores profesionales de juegos todavía les gusta tener la opción .....
  • Java tiene una basura recolectada , tiempo de ejecución administrado. El 99% de las veces, esta es una gran ventaja, sin duda hace que la codificación sea más fácil y menos propensa a errores y es una de las principales razones por las que Java es tan popular. Sin embargo, ocasiona un problema de latencia ocasional para los juegos, ya que los ciclos de recolección de basura pueden causar pausas notables. Esto se está convirtiendo en un problema menor con las nuevas JVM de baja latencia, pero sigue siendo un problema para los juegos con gran cantidad de gráficos donde mantener un alto FPS es crítico.

Razones no técnicas:

  • Las casas de desarrollo de juegos profesionales están fuertemente invertidas en habilidades y tecnologías C / C ++. Esto crea una gran cantidad de inercia .
  • La percepción en gran medida irracional de que Java es lento. Posiblemente cierto en los años 90, definitivamente no es cierto ahora: ciertamente puede escribir un juego 3D comercial rentable con Java (¿ Runescape cualquiera? ¿O qué tal Minecraft ?)
  • Una percepción bastante justa de que Java se centra más en las aplicaciones comerciales y en la web que en los juegos. Esto podría cambiar con el crecimiento de Mobile y la necesidad de un mayor desarrollo multiplataforma, pero ciertamente es cierto en la actualidad.

Curiosamente, también hay algunas buenas razones por las cuales los desarrolladores de juegos deberían considerar Java:

  • Portabilidad : a medida que prolifera la cantidad de plataformas objetivo, Java se vuelve cada vez más atractivo con su capacidad prácticamente incomparable para crear binarios genuinamente multiplataforma
  • Ecosistema de bibliotecas : con la excepción muy importante de los motores de juegos en 3D, Java tiene la mejor gama de bibliotecas en general de cualquier plataforma. Redes, sonido, IA, procesamiento de imágenes, almacenes de datos de clave / valor, usted nombra el tema y probablemente haya una biblioteca Java de código abierto para ello.
  • Desarrollo del lado del servidor : Java es un gran lenguaje / plataforma para el servidor, y a medida que más juegos incorporen elementos multijugador masivos, el lado del servidor será cada vez más importante. Java en Linux se ve bastante convincente aquí como plataforma.
  • El JVM es probablemente el entorno de ejecución de VM mejor diseñado del mundo, con una fantástica recolección de basura, un compilador JIT, soporte de concurrencia, etc. El mejor entorno de tiempo de ejecución posible.
  • Otros lenguajes JVM : Java es un caballo de batalla sólido, pero la verdadera innovación está ocurriendo con los nuevos idiomas JVM (Scala, Clojure en particular). Estos lenguajes obtienen todas las ventajas de la plataforma Java / JVM, además de ser lenguajes modernos extremadamente poderosos.
mikera
fuente
19
No, la protabilidad no es mejor en Java en el mundo de los videojuegos. La mayoría de las consolas no tienen una JVM. Por razones de portabilidad, C ++ se prefiere a Java en el mundo de los videojuegos.
deadalnix
55
¿Por qué es el ecosistema de la biblioteca un bono para Java? Redes, sonido, pares clave-valor, eso no es una cosa; eso está disponible en todas partes hoy en día. De hecho, diría que el procesamiento de AI e imágenes es mucho más fácil con las bibliotecas C / C ++ (fann, OpenCV).
MrFox
44
Más importante que el FPS, quizás enfatizaría velocidades de fotogramas consistentes . Puedo hacer que mi juego se ejecute a 100FPS, pero si algunos de esos cuadros toman medio segundo, eso no va a funcionar. Incluso si GC es rápido, si causa irregularidades notables, sigue siendo un problema. (Esto no habla nada en particular del rendimiento de Java, solo un problema general a tener en cuenta)
Gankro
1
Escribí un shooter en primera persona en Java y nunca he tenido ningún problema con el recolector de basura, incluso cuando no utilicé uno con baja latencia. De todos modos, cuando la memoria no está asignada en el montón de Java, depende de mí lidiar con ella sin el recolector de basura y la mayor parte de mi huella de memoria proviene de los VBO. En otros términos, la recolección de basura no es un problema porque funciona cuando se usa para lo que está diseñada y no depende de manejar objetos grandes en la GPU o en el montón nativo (! = Montón de Java). No culpe a un yunque por no ser un medio eficiente de cepillarse los dientes.
gouessej
1
@deadalnix El mundo de los videojuegos no solo está compuesto por las consolas.
gouessej
27

De acuerdo, hay mucha información errónea en este hilo.

Conozco muy bien el negocio del juego , después de haber estado en él durante 25 años. También conozco Java en juegos extremadamente bien después de haber sido el evangelista técnico de Sun Java Game y ser experto en programación de rendimiento de Java.

En términos de velocidad computacional, Java supera a C ++ en muchos puntos de referencia de computación científica en la actualidad. Puede escribir código patológico en cualquier idioma que funcione mal si lo desea, pero sobre todo, están a la par y lo han estado durante mucho tiempo.

En términos de uso de memoria, Java tiene algunos gastos generales. HelloWorld es un programa 4K en Java. Pero esa sobrecarga no tiene sentido en los sistemas multi GB de hoy. Finalmente, Java tiene más tiempo de inicio. No recomendaría usar Java para utilidades de tiempo de ejecución corto como los comandos de línea de comandos de Unix. En esos casos, el inicio dominará su rendimiento. Sin embargo, en un juego, es bastante insignificante.

El código de juego Java escrito correctamente no sufre pausas de GC. Al igual que el código C / C ++, requiere una gestión de memoria activa pero no al nivel que C / C ++ requiere. Mientras mantenga su uso de memoria en objetos de larga vida (persisten durante un nivel o juego completo) y en objetos de vida muy corta (vectores y demás, pasados ​​y rápidamente destruidos después del cálculo) gc no debería ser un problema visible.

En términos de acceso directo a la memoria, Java lo ha tenido por MUCHO tiempo; desde Java 1.4 en forma de Buffers de bytes directos nativos. El giro de bits en Java puede ser un poco molesto debido a la falta de tipos enteros sin signo, pero las rondas de trabajo son bien conocidas y no son terriblemente onerosas.

Si bien su verdadero Java nunca ha tenido un enlace Direct3D, eso se debe a que las tecnologías Java se esfuerzan por la portabilidad. Tiene DOS enlaces OpenGL (JOGL y LWJGL) y enlace OpenAL (JOAL) y un enlace de entrada portátil (JInput) que se une bajo el capó a DirectInput en Windows, HID Manager en OSX y un enlace Linux (se me olvida cuál).

Es cierto que ningún motor de juego completo ha presentado Java como, por ejemplo, Unity, ha presentado C # y eso es una debilidad en el espacio independiente. Por otro lado, había dos buenos APIS de nivel de Scenegraph que eran totalmente compatibles con plataformas en Windows, OSX y Linux. Ambos escritos por Josh Slack, el primero se llamaba motor JMonkey y el segundo Ardor3D.

El cartel superior es correcto en cuanto a que las dos cosas más importantes que retrasaron a Java en el desarrollo del juego fueron los prejuicios y la portabilidad. Este último fue el mayor problema. Aunque podía escribir un juego Java y enviarlo en Windows, OSX y Linux, nunca hubo una consola VM. Esto se debió a la ineptitud total en la administración intermedia de Sun. Los pocos de nosotros que trabajamos en Java en juegos en realidad tuvimos acuerdos con Sony no menos de 3 veces para obtener una VM en una Playstation y las 3 veces que la gerencia media de Sun la mató.

Si bien Sun coqueteó con las tecnologías de los clientes, el hecho es que la administración de Sun nunca obtuvo productos de consumo. Es por eso que Java como lenguaje de cliente de Sun nunca tuvo éxito de ninguna forma, y ​​por qué tomó Google y Dalvik (la VM de Java similar a Android) para hacer de Java una plataforma exitosa en cualquier lugar.

Y es por eso que codifico juegos en C # hoy. Porque Mono fue a donde la dirección de Sun se negó.

user430788
fuente
8

Java es ideal para la lógica empresarial, los servidores y el código independiente de la plataforma que tiene que ejecutarse de manera confiable. Hay varios factores por los que Java no se usa con frecuencia en los juegos:

  • comprobación de límites y otros mecanismos de seguridad (diferencia de rendimiento marginal en estos días)
  • tener que convertir entre estructuras de datos C ++ y estructuras de datos Java (no puede simplemente copiar memoria entre buffers)
  • muchos de los libros y tutoriales siguen a la multitud, por lo que es difícil encontrar información de desarrollo de juegos que no sea C ++
  • Las bibliotecas de gráficos principales (DirectX y OpenGL) y muchos motores estándar están basados ​​en C / C ++
  • muchos juegos intentan ejecutarse lo más rápido posible para que puedan agregar funciones visualmente más atractivas

No es fácil trabajar con bibliotecas C ++ a partir de lenguajes de código de bytes como Java (escribir una capa JNI) y .net (muchos atributos de clasificación / descomposición, api / estructura). Por lo tanto, agrega bastante trabajo por poco beneficio.

Una nota al margen: algunos servidores de juegos usan Java.

Publicación similar aquí : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java

Graeme Wicksted
fuente
No tiene que escribir JNI usted mismo, solo use JogAmp o cualquier biblioteca similar.
gouessej
Buen punto. He usado JOGL y JMonkeyEngine en Java. Más reciente en He usado XNA / MonoGame para DirectX y OpenTK para OpenGL con nvorbis / naudio / openal en C #. Y funcionan muy bien para juegos pequeños a medianos, especialmente cuando se trabaja con sombreadores. Gran mejora de la productividad sobre C ++. Entonces su único problema real es el mismo que cualquier lenguaje basado en GC: prevenir / mitigar el GC. Permitirá su velocidad de cuadros periódicamente, por lo que querrá matrices de tamaño fijo, asignaciones estáticas o búferes de larga duración que se pueden tirar cuando el juego se detiene (menús, carga, cinemática).
Graeme Wicksted
He usado JOGL desde 2006 y no he tenido este tipo de problema incluso en hardware de muy bajo nivel en un entorno de escritorio. El recolector de basura no tiene la culpa porque los objetos más grandes a menudo se encuentran en la RAM de la GPU o en el montón nativo (generalmente las memorias intermedias directas de NIO), el primero no es administrado por la recolección de basura "normal" y el segundo no t gestionado directamente por la recolección de basura "normal", ya que se ocupa de los objetos de Java en el montón de Java. Depende del desarrollador liberar la memoria asignada en el montón nativo de manera eficiente.
gouessej
En mi humilde opinión, el problema proviene de algunas "optimizaciones" imaginadas por programadores que no tienen una mentalidad de Java que impiden que el recolector de basura haga su trabajo. Si mantiene algunas referencias fuertes sobre algunos objetos inútiles de Java vinculados a algunos recursos nativos, el recolector de basura nunca los considerará recuperables. La asignación fuera del montón puede ser útil en algunos casos, pero si abusa de ella, sus recursos de larga duración permanecerán en la memoria y no podrá crear nuevos objetos.
gouessej
Algunos programadores de juegos prefieren asignar enormes buffers al principio, dividirlos en tiempo de ejecución y administrar esta memoria por sí mismos, pero probablemente lo harán peor que el sistema operativo y luego, Java pasará mucho tiempo para liberar espacio para crear nuevos objetos. Evitar la pérdida de memoria no es más difícil en Java y una solución más viable consiste en rastrear solo los objetos cuya memoria no está asignada en el montón de Java para liberarlos en el momento adecuado (durante una pausa, al cambiar de un nivel a otro , ...), no tiene nada que ver con el recolector de basura.
gouessej
5

Java no es lo suficientemente rápido para la mayoría del desarrollo de juegos. Es mucho más lento que usar C ++ / Assembly, que es el estándar. Es la misma razón por la que no se realiza más desarrollo de juegos usando C # o VB. Los desarrolladores de juegos necesitan y planean cada último ciclo de reloj en el que puedan tener acceso para cosas como cálculos de física, lógica de IA e interacciones del entorno.

Para juegos más simples, Java podría usarse con bastante eficacia. Si desea crear un clon de Tetris o Bejeweled, o algo más de ese nivel de detalle, Java funcionaría bien. Pero Java no puede crear juegos como Halo, Medal of Honor, Command & Conquer, etc., y hacerlo jugable. Al menos como existe hoy en día.

Y las razones que enumeras en tu pregunta también son válidas. Excepto, creo, por la falta de desarrolladores de juegos con experiencia en Java. Muchos juegos en teléfonos y otros dispositivos portátiles están escritos en Java (incluida la mayoría de los juegos de Android), y algunos de los juegos son bastante excelentes. Así que creo que hay una base decente y creciente de desarrolladores de juegos con conocimiento de Java.

La idea está cambiando sobre la capacidad de usar estos lenguajes de nivel superior para algunos de los juegos más avanzados. Por ejemplo, uno de mis juegos favoritos, Auran's Train Simulator, está escrito con grandes porciones en C #, y funciona bastante bien. Entonces la base está creciendo y continuará evolucionando.

BBlake
fuente
17
Dejas de lado uno de los puntos más importantes; la gran mayoría de las herramientas y API que usaría están escritas en C ++ y reescribirlas para que funcionen con Java o cualquier otro lenguaje sería una tonelada de trabajo. Además, su generalización de que "[Java es] mucho más lento que usar C ++ / Assembly " es demasiado amplia para ser precisa. El ensamblaje no se usa con tanta frecuencia como puede pensar en los juegos de PC porque un buen compilador probablemente generará un código más eficiente que el ensamblador de escritura. Sin embargo, se requiere el uso determinista de recursos y la capacidad de acertar en el hardware.
Ed S.
15
Alguien realmente necesita crear un mejor ejemplo de las capacidades de Java que Minecraft. Hasta que alguien pueda crear el equivalente de WoW o C&C o MOH o Starcraft en Java o C #, continuaré aferrándome a lo que he dicho.
BBlake
12
"El ensamblaje no se usa con tanta frecuencia como se puede pensar en los juegos de PC porque un buen compilador probablemente generará un código más eficiente que el ensamblador de escritura". Esa es otra generalización. Todavía tengo que ver un compilador que pueda generar un mejor lenguaje de máquina IA32 que un experimentado programador de lenguaje ensamblador IA32. Los compiladores generan código para una máquina abstracta que se asigna a una máquina de destino. Un programador de lenguaje ensamblador aprovecha al máximo el procesador subyacente, incluidos los modismos de máquina.
bit-twiddler
10
No olvides el uso de memoria. El uso de la memoria es probablemente más importante que la velocidad. Java no está diseñado para el control directo de memoria como C ++ y el recolector de basura significa que el uso de memoria siempre es significativamente mayor que C ++ para la misma tarea.
Mateo leyó el
99
Esto no es 1985. Tenemos más de 640k de memoria, mejores procesadores de 50 mghz y más de 1.44 mbs de almacenamiento extraíble. El desafío de los desarrolladores de juegos de hoy no es lo mismo que hace 25 años. Continúe y encuentre un ejemplo de código x86 / o ia64 hecho a mano para un juego moderno. Ciertos mitos son simplemente erróneos. El desafío es la portabilidad y los clientes de nivel inferior que utilizan entornos operativos relativamente antiguos. Mínimo común denominador vs imersion convincente.
JustinC
5

Los juegos modernos tienen que ver con gráficos 3D que suceden en hardware de propósito especial.

Incluso en 2002, Jacob Marner descubrió en su informe "Evaluación de Java para el desarrollo de juegos" que Java era bastante utilizable para los juegos, excepto para las partes más dependientes del rendimiento, y debido a la robustez del lenguaje y la JVM subyacente que era más barato para hacerlo de esta manera.

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

Es mi opinión personal que con el progreso que ha sucedido desde entonces, especialmente en gráficos 3D, y con los excelentes enlaces a OpenGL et al, que esta desventaja es mucho menos pronunciada en estos días.

Por lo tanto, el problema debe estar en otra parte. Una razón probable es el tamaño del tiempo de ejecución de Java (que es mucho menos un problema en estos días con los juegos de varios DVD), y otra la inercia del código existente. Es notoriamente frágil comenzar a trabajar con código nativo en Java. Una tercera razón es con lo que están familiarizados los desarrolladores estrella que hacen los juegos. Un cuarto es si Java está disponible en la plataforma.

Sin embargo, una cosa es cierta: la mayoría de los juegos se están convirtiendo en scriptables en lugar de quemarlos en código C desde el principio, y desea el mejor tiempo de ejecución debajo de su lenguaje de scripts. En estos días esto esencialmente significa CLR o JVM.

usuario1249
fuente
1
oddlabs.com/technology.php - "Hemos basado nuestro desarrollo en la combinación de LWJGL y Java, que permite que el juego se ejecute en cualquier plataforma compatible con LWJGL sin modificaciones y a una velocidad comparable al código nativo dependiente de la plataforma".
Jake2 superó a Quake2 hace más de 10 años. Ya no estamos en 2002.
gouessej
4

A los desarrolladores de juegos les gusta estar cerca del metal y a menudo escriben sus apretados bucles internos en el ensamblaje. Java no ofrece el mismo nivel de rendimiento posible, tanto en términos de velocidad constante como de uso de memoria (ejecutar un JIT tiene su costo).

dan_waterworth
fuente
4

Creo que el factor limitante para la mayoría de las personas es la (falta de) disponibilidad de buenos motores de juego. Para llegar muy lejos, debemos ver por qué no están disponibles.

Lo miraría desde la otra dirección por un momento. Desarrollar un motor de juego (por ejemplo) es mucho trabajo. ¿Quién se beneficiaría lo suficiente de desarrollar uno para invertir el tiempo y el esfuerzo para hacerlo?

La mayoría de los candidatos obvios para el desarrollo similar al framework en / para Java (por ejemplo, IBM, Oracle) parecen tener cero interés en los juegos. Los candidatos obvios para el desarrollo de juegos (por ejemplo, Id, EA) parecen tener un interés casi igual en Java.

Casi el único candidato que se me ocurre que parece razonable sería Google. El lenguaje de desarrollo principal para Android es Java, y fomentar el desarrollo de juegos para Android podría proporcionar una ventaja real para la plataforma.

Hasta donde sé, no lo han hecho (¿todavía?), Lo que deja algunos límites bastante severos para casi cualquier otra persona. Sin poco en el camino de los motores de juegos modernos y de alto rendimiento para usar el desarrollo en Java, significa bastante trabajo extra, con (lo que me parece) pocas posibilidades de producir muchos beneficios a cambio de ese trabajo extra.

Jerry Coffin
fuente
Creo que ha tenido un problema importante con los motores de juego: creo que esta es la razón más importante por la que Java no se ha puesto al día con C / C ++. Sin embargo, es posible que el código abierto nivele un poco el campo de juego: me ha impresionado mucho jMonkeyEngine ( jmonkeyengine.com ).
mikera
y no olviden que los desarrolladores de juegos son extremadamente conservadores en general (técnicamente), y la mayoría de las tiendas grandes (influyentes) han existido durante décadas y están centradas en C (++) / ASM, por lo que no van a invertir en el desarrollo de Java como significaría una gran inversión de tiempo, dinero y otros recursos por adelantado cuando tengan una arquitectura C (++) / ASM completa lista para funcionar.
Jingnt
1

La pregunta está a la altura de preguntar algo en las líneas de:

Lo que es mejor para impulsar su automóvil, un motor de barco o un motor a reacción.

Se trata de escalabilidad, evitación de errores, velocidad, firma de memoria, modularidad y una gran cantidad de cosas. La pregunta no debe ser sobre qué es mejor como estándar de la industria, la pregunta debe ser "qué es mejor para mí", como lo que sabes o qué tan bien lo sabes. Si hace el trabajo, entonces hace el trabajo, si realmente puede vender la idea, entonces funciona y quién sabe, incluso podría doblar unas cucharas.

Meh
fuente
0

Java no se creó teniendo en cuenta el desarrollo de juegos, sino que se creó para ser un lenguaje "para la web".

En cuanto al desarrollo de juegos, Sun realmente no era compatible con Java como lenguaje de desarrollo de juegos, ya que Microsoft respaldaba C #.

Creo que la falta de marcos de desarrollo de juegos convincentes es lo que realmente mató a Java en este aspecto.

Mahmoud Hossam
fuente
3
Pero C ++ tampoco se creó como un lenguaje de juegos, sino como un lenguaje de programación de sistemas como C. Y Sun realmente hizo un esfuerzo en Java como lenguaje de juegos, creo que estaban cooperando con Sony para llevar Java a la PS2 o algo, pero nunca sucedió ...
Anto
1
@Phobia: Pero fue diseñado para la programación de sistemas.
Anto
1
@Phobia: estoy diciendo que es un lenguaje de programación de uso general , al igual que C ++. En su respuesta, dice que Java no fue diseñado como un lenguaje de programación de juegos, pero olvida que C ++ tampoco está diseñado de esa manera.
Anto
2
@ Joe Blow: De la página de Wikipedia sobre C: "Aunque C fue diseñado para implementar software de sistema , también es ampliamente utilizado para desarrollar software de aplicación portátil". Creo que eso está bastante claro, ¿no?
Anto
2
@Phobia Lamento tus preferencias personales, pero son completamente irrelevantes para la discusión. Además, no quiero cuestionar que hoy en día C ++ se usa casi exclusivamente en la programación de aplicaciones. De esto no se trataba esta discusión. Su afirmación de que Java fue diseñado teniendo en cuenta la programación web. Bueno, C ++ fue diseñado con la programación de sistemas en mente. Dice su diseñador. Fin de la discusión.
Konrad Rudolph
-1

Es más fácil pegar C más directamente al nuevo hardware y controladores no convencionales. Cuanto antes y más cerca pueda un programador de juegos del hardware, mejor podrán superar a los juegos de la competencia. Los programadores de juegos posteriores solo siguen la misma metodología y herramientas que los juegos probados anteriores.

Para juegos donde la optimización para el hardware más reciente es menos importante, como los juegos casuales de teléfonos celulares, usar C de esta manera es menos importante que la mayor portabilidad de Java.

hotpaw2
fuente
-4

Para algunas personas, la razón no tiene nada que ver con la velocidad, las bibliotecas o la disponibilidad. Es simplemente por el lenguaje en sí. A algunas personas simplemente no les gusta el lenguaje Java. Otras personas prefieren usar su lenguaje de programación favorito en lugar de usar Java para hacer juegos.

Eco
fuente
esto se lee más como un comentario, vea Cómo responder
mosquito
-8

Por supuesto, podría ser otra cosa. ¿Podría alguien que conoce el negocio mejor que yo explicar por qué Java no está ganando impulso en lo que respecta al desarrollo de juegos?

Es un lenguaje de interpretación, es decir, lento. Estás tratando con tarjetas gráficas y gráficas que son hardware. ¿Qué es un buen lenguaje para lidiar con el hardware? Bueno, C ++, es bastante bajo, y lidias con punteros y lo que sea.

Si desea generar gráficos locos como crysis y lo que sea, no va a hacer Java para ello.

No solo eso, Oracle es dueño de Java, la idea de que una compañía puede demandarlo no se atreve bien. Especialmente cuando desea construir su propio intérprete para JAVA para apuntar a los juegos sin ser demandado debido a la fragmentación del FUD.

programador mítico
fuente
1
Debería leer seriamente sobre la compilación JIT, y ver algunos puntos de referencia donde Java se coloca contra C ++
Anto
1
¿Quién diablos votó esta respuesta? ¡Toda esta pregunta se está volviendo increíblemente ridícula! Caramba.
Fattie
77
@ Joe La respuesta es incorrecta. Java no se interpreta.
Konrad Rudolph
3
@Anto Olvídate de esos tontos puntos de referencia. C ++ es un orden de magnitud más rápido que Java, donde cuenta, vea programmers.stackexchange.com/questions/29109/29136#29136 y programmers.stackexchange.com/questions/368/13888#13888 .
Konrad Rudolph
1
@Anto ¿Qué se supone que debo mirar? ¿Velocidad? C ++. ¿Uso de memoria? C ++. Mire Minecraft e intente alojar un servidor y vea cuánta memoria está ocupando el juego. Java consume mucha más memoria frente a C ++. Hacer un juego en línea, me imagino que es bastante difícil en Java. Cada punto de referencia que he visto hasta ahora Java consume más memoria, ahora tener un juego mmorpg donde el servidor central está codificado en Java suena bien solo si ignoras el aspecto de la memoria o cambias la definición de masivo en MMORPG.
mythicalprogrammer