He explorado Internet, pero no hay muchos recursos para el desarrollo de juegos Java, ni siquiera tantos como C ++. De hecho, la mayoría de los motores están escritos en C ++. Traté de jugar un juego hecho con jMonkeyEngine, pero el juego fue terriblemente lento, hasta el punto en que mi computadora se congeló. No tenía otras aplicaciones Java en ejecución, y nada de recursos intensivos. En contraste, mi computadora puede jugar juegos 3D más modernos con facilidad. Si sigo aprendiendo y mejorando Java ahora, y resulta que más tarde debo aprender C ++, hacer el cambio podría ser difícil.
¿Es Java un lenguaje aceptable para el desarrollo serio de juegos? Por serio, quiero decir gráficos de alta calidad, sin mucho retraso en las computadoras modernas. También quiero considerar hacer juegos para consolas.
fuente
Respuestas:
Sí, consulte esta lista para obtener una prueba. Esos son algunos juegos hechos con Java usando The Lightweight Java Game Library (LWJGL). Es un marco de bajo nivel, que proporciona OpenGL para gráficos de alta calidad y OpenAL para sonidos. También proporciona API de entrada. Con estos, puedes comenzar fácilmente a desarrollar juegos serios en Java.
Actualmente estoy escribiendo mi segundo juego 3D como un proyecto de hobby en Java, y me encanta. En el pasado solía escribir mis juegos con C ++, pero después de cambiar a Java no hay vuelta atrás. El soporte de múltiples sistemas operativos con Java puede ser muy fácil, por ejemplo, mi juego Java anterior, que desarrollé en Windows durante un año, funcionó en Linux de inmediato y en OS X con un solo error sin necesidad de compilar nada en esas plataformas.
Por otro lado, con Java tienes un par de problemas.
fuente
Realmente no. Aquí está la cosa: en primer lugar, hay muy poco en términos de bibliotecas existentes para Java en comparación con prácticamente todo lo que es para C ++.
En segundo lugar, Java como lenguaje simplemente no se presta bien para el desarrollo de juegos; quiero decir, por ejemplo, si se trata de buffers de GPU, Java no proporciona una función de lenguaje que lo ayudará a garantizar que estén correctamente bloqueados y desbloqueado o eliminado, lo que hace C ++. Además, está el problema del rendimiento, y el GC no es determinista, lo que es súper malo para un juego.
Nunca he observado ningún juego no independiente que haya pasado mucho tiempo en un lenguaje que no fue compilado en código nativo antes de la ejecución, e incluso los juegos independientes que lo hacen son una rareza. Así que mi creencia en este momento es que simplemente no se puede hacer.
Sí, absolutamente lo hará. Java y C ++ son muy diferentes, a pesar de sus similitudes sintácticas superficiales. La experiencia en Java no cuenta prácticamente para nada cuando se aprende C ++.
El juego sobre los gráficos es una opción viable, y puedes verlo en el éxito de juegos como Terarria y Minecraft. Pero si tiene la intención de crear gráficos srs, entonces no será factible en Java.
fuente
Si su razón para elegir Java es que no puede entender C ++, sus programas Java no serán lo suficientemente rápidos para gráficos de alta calidad. El uso de un lenguaje de nivel superior debe ser porque te hace más productivo, no porque no puedas entender el lenguaje de nivel inferior.
No creo que sea una mala idea escribir un juego en Java, especialmente si el juego es simple, pero inmediatamente tendrás problemas de rendimiento en Java si lo usas como una muleta.
Gráficos pesados: posible, pero va a hacer lo mismo en Java / LWJGL que en C ++ / GL: escribir bytes en buffers de GPU y / o usar las listas de visualización obsoletas como lo hace Minecraft. Si no comprende la gestión de la memoria, tampoco lo hará correctamente.
Juego rápido sin retraso: no es una tarea fácil en ningún idioma, y es más probable que te dispares en el pie de cualquier manera sin pensarlo.
No, Java no estará disponible en consolas.
fuente
Un programador experimentado generalmente conocerá muchos lenguajes de programación: aprender lenguajes de programación adicionales no es demasiado difícil una vez que conoce uno bien. Sin embargo, recomendaría encarecidamente que C ++ no sea su primer idioma, y probablemente tampoco el segundo.
Esto se debe a que C ++ obtiene gran parte de su eficiencia al no realizar ninguna verificación significativa de errores de tiempo de ejecución. Por ejemplo, acceder a un elemento al final de una matriz en Java siempre generará una excepción que le indica al programador exactamente qué está mal. En C ++ puede tener suerte y se bloqueará de inmediato, pero con mucha frecuencia desechará silenciosamente otros datos y el error no aparecerá hasta mucho más tarde .
Te sugiero que te quedes con Java por ahora (o cambia a C # si lo prefieres). Eso le permitirá hacer las cosas más rápido que usar C ++, y el rendimiento en una PC no debería ser un problema.
Piense en aprender C ++ después de haber completado algunos proyectos en lenguajes más seguros. C ++ es lo que necesitará para la mayoría de los trabajos profesionales de desarrollo de juegos.
Tenga en cuenta que, con la excepción de que C # / XNA obtenga un juego que escribió en una consola como mínimo, debe establecer una empresa, una oficina y tener un gran presupuesto disponible para hardware de desarrollo y otros gastos.
fuente
Descargo de responsabilidad: esto no responde exactamente a su pregunta. Sin embargo, he intentado (brevemente) mencionar algunos puntos que pueden ser de su interés.
La razón por la que ve tanto sobre C ++ es porque C ++ sigue siendo el estándar de la industria: el lenguaje más común para consolas, etc.
Java no se usa con frecuencia. Minecraft es un juego bastante popular que lo hizo grande con Java; pero no es tan bueno gráficamente. Spiral Knights no es malo, también está hecho en Java, con gráficos significativos.
Si le gusta Java, C # es muy similar en sintaxis, con la ventaja de que puede interoperar con C ++, por lo que se pueden hacer cosas de bajo nivel en C ++ si es necesario. Unity puede usar C # para secuencias de comandos, y XNA es una excelente opción.
Nuevamente, Java no se usa ampliamente. Si le gusta el estilo y la sintaxis, creo que encontrará que C # es una experiencia de codificación muy similar y muy agradable.
Espero que tus sueños se hagan realidad, es muy divertido en el camino :)
fuente
Esto no responde tu pregunta; los problemas de gráficos y consola parecen ser algo que debes considerar. También la GC afecta el rendimiento. Pero de lo que escribo:
Si está escribiendo programas OO grandes y complejos, los escribirá 5 veces más rápido en Java que C ++. Además, el mantenimiento será mucho más fácil. Cambié, (ciertamente para software que no es de juegos), y mi productividad se disparó. C #, otra buena alternativa, es más difícil de aprender que Java porque hay mucho más. Cuando lo sepa, puede escribir código incluso más rápido que en Java; te ofrece muchos trucos. Sin embargo, creo que esos trucos pueden dificultar el mantenimiento. Y luego está el documento de Java, que ayuda con las bibliotecas de Sun y su propio código antiguo. C # no tiene nada parecido.
Hice un gran juego peludo en Java y encontré el lenguaje perfecto, pero mis gráficos eran elementales y no era un juego de disparos donde una décima de segundo era una eternidad para los jugadores. Además, espero agregarle mucho más tarde, mientras que creo que la mayoría de la gente simplemente va y escribe un juego completamente nuevo.
fuente
Mira amigo, la respuesta simple a "¿Es Java viable para el desarrollador de juegos" es un obvio sí. Puedes usar cualquier lenguaje de programación para hacer juegos. Eso no significa que debas .
Probablemente, las mismas cosas que lo apagan de C ++ (administración de memoria de bajo nivel, sin recolector de basura, tener que prestar atención a los punteros, estructuras como matrices, etc.) son las mismas cosas que debe aprender si desea explotar los recursos de una computadora de manera más eficiente . Tus juegos funcionarán mejor si estás explotando los recursos de la computadora de manera más eficiente.
Java hace algunas cosas (como la comprobación de los límites de la matriz) que solo hacen que se ejecute más lentamente. En este código de ejemplo de ruido Java Perlin optimizado, el autor comentó "(el acceso a la matriz es mucho más lento que el acceso de los miembros)". Este tipo de cosas es bastante contrario a la intuición proveniente de un fondo C ++. Pero en Java, tales cosas son.
Digo que dejen de esquivar la bala, aprendan C ++ y utilícenlo.
fuente
Debe hacerlo en el idioma que mejor conoce hasta que pueda pagar una educación formal (¿Licenciatura en Ciencias?) En Ciencias de la Computación, haciendo hincapié en el diseño del juego. Posiblemente podría usar su juego para obtener una beca, especialmente si puede decir "Hice esto sin ningún entrenamiento formal en Java"
Las JVM modernas, incluso la de Oracle, tienen muchas, muchas características para abordar las preocupaciones que la gente ha planteado aquí. Puede usar diferentes recolectores de basura para obtener un comportamiento más determinista del recolector de basura. No tengo una amplia experiencia con las bibliotecas 3D, solo un poco con Java3D, pero aquí nadie parece haberse quejado de ellas. El análisis de escape ahora permite la elisión de bloqueo y una asignación mucho más rápida / insignificante de objetos de vida muy corta.
El problema es que, si elige Java de C ++, tendrá que aprender a usar correctamente la concurrencia y comprender bien la administración de la memoria. Después de todo, puedes arruinarlo tan fácilmente
malloc
como puedes hacerlonew
. No sé cómo son las herramientas para C ++, pero las herramientas de creación de perfiles para Java son bastante fáciles de usar, gratuitas e integradas con el IDE. Puede usarlos para rastrear problemas de rendimiento y aprender .fuente