¿Desarrollar juegos en Java?

Zoth

Saludos a todos.

Quería preguntaros si es posible desarrollar ( y cómo ) juegos en Java, ya que me gustaría como método para afianzar conocimientos (pocos o medios) a la vez que te agrada el trabajo. Si algo te gusta, lo haces con más ganas y aprendes, es lo que pienso.

Así pues, si es posible ¿existen manuales, guías, videotutoriales ( lo que sea ) de cómo hacer poco a poco un juego?. No estoy pidiendo copiar y pegar un juego, lo que quiero es algo explicativo de por qué se pone tal método, o por qué se pone tal atributo para que haga tal cosa.

Gracias :)

KeTo

#1 Buenas, yo estoy desarrollando cosas en java utilizando el framework libgdx.

Te recomiendo que le eches un ojo a este tutorial y ya ves si te llama o no https://github.com/libgdx/libgdx/wiki/A-simple-game Ahí es donde empecé yo y en el resto de la wiki tienes todo lo necesario para ampliar conocimientos sobre libgdx.

Para cualquier cosa no dudes en preguntar por aquí :)

1
YaW

Es posible si y juegos con calidad bastante alta.

Como te dicen, libgdx es tu amigo

mortadelegle

Nota de un estudiante: debido a que el bytecode tienes que ejecutarlo en una maquina virtual de java no hagas nada que requiera mil millones calculos, o basicamente tendras algo como Minecraft, que aun siendo "voxeles" (En realidad no son voxeles lo se) no te va a ir nunca super super genial aunque tengas muy buen hardware.

Pero para proyectillos no creo que tengas ningún problema.

2 respuestas
Zoth

Muchas gracias por las respuestas, le echaré un ojo :)

KeTo

#4 ¿Cuál sería el siguiente paso?, ¿aprender c++?.

1 respuesta
mortadelegle

#6 Hmm depende de que quieras aprender, si quieres aprender a programar bien sí, C/C++ (Y de paso estudias un poco de Assembly aunque sea un dolor de huevos) es la forma en la que aprendes de verdad que es lo que estas haciendo sin tanta abstracción de por medio, C y C++ son lenguajes "intermedios" en el sentido de que son lenguajes de alto nivel pero tienen operaciones de bajo nivel (tipo mascaras de Bits que envias directamente a registros de memoria y cosas así)

Pero si lo quieres es trastear y empezar a prototipar ya, o Unity o Unreal engine te permiten hacer mucho con muy poco, eso sí, no vas a ver que es lo que pasa por debajo.

Sin mencionar que en muchas ocasiones para hacer proyectos pequeños son overkill total.

Yo empece con C++ y es de lo que mas se, de todas formas me pille un libro de C# para Unity (Aunque ten en cuenta que el Unreal va con C++) y asi ves distintos lenguajes, logicamente a la hora de hacer algo en videojuegos el lenguaje sobre el que se suele construir todo es C++ (Menos scripting que puede ser Javascript o Lua por poner dos ejemplos) por el tema de que cuando necesitas rendimiento tienes que optimizar con un lenguaje que te permita "programar mas cerca del metal" y Java que corre sobre una maquina virtual pues no...

De todas formas acabo de soltar mil nombres de lenguajes y conceptos cuando no he respondido a tu pregunta, quieres aprender a programar? C/C++ (recomiendo C++) quieres trastrear y aprender cosas que no son necesariamente codigo puro tipo meshes,arboles de animaciones, maquinas moore/mealy para IA? Unity/Unreal y a volar.

Y ya de paso tambien recomiendo leer algún libro de diseño, que mola de vez en cuando hacer algo distinto en papel antes de pasarlo a bits.

2 1 respuesta
Zoth

Java y C++ se parecen algo ¿no? (según tengo entendido). Lo digo porque si comentáis que se suele, o se usa C++ entonces me pondría a aprender dicho lenguaje sin ningún problema. ¿Hay alguna plataforma/post por aquí que dé unos primeros pasos? para tener una referencia simplemente.

Gracias a todos :)

2 respuestas
josej123

#8 Yo empezaría con C++ y luego iría metiendo la pezuña poco a poco en otros lenguajes tipo Java. Así fue al menos como me lo hicieron a mi en la carrera de informática y no parece ir mal por todo lo que ha comentado el compañero #7.

1 respuesta
mortadelegle

#8 Emmm meh, se supone que Java tiene una sintaxis basada en C, pero eso no quiere decir mucho, tienes que tener en cuenta que C++ ademas de Programacion Orientada a Objetos tambien soporta programación declarativa (Y de hecho se supone que mas paradigmas de programación) quiero decir que en Java casi casi todo son objetos y clases, y todo se basa alrededor de POO, si coges C++ toda la parte que viene de la herencia de C son otros paradigmas.

TL;DR: Se parecen pero no, por saber de uno no vas a saber de otro mas que por saber cualquier otro lenguaje informatico.

#9 Comentar que aunque yo he empezado con C++ hay universidades donde empiezan con Java, incluso he escuchado Phyton, porque para enseñar cosas tipo data flow, condiciones y esas cosas puede resultar mas sencillo, pero opino que no es la mejor forma porque puedes coger manias sucias (Como pensar que tienes un garbage colector y luego resulta que llegas a C++ tienes punteros y acabas borrando el SO por dejar un puntero por ahí, cosa que antes se podía hacer)

Pero que conste que el lenguaje no es tan importante a la hora de la verdad, sino mas bien los conceptos, las tecnologías son temporales, mas adelante saldran mejores, pero hay conceptos universales a la computacion que se mantienen desde los 70-80.

2 2 respuestas
josej123

#10 Como ya digo yo hablo por mi experiencia academica y porque me he sentido identificado por lo que pusiste anteriormente, así que quizás pueda equivocarme en lo que afirmé previamente. En primero de carrera comencé a dar C++ y un poquito de ensamblador. Luego en segundo profundizamos en C++ y empezaron a dar Java y avanzar con ensamblador. Ahora en tercero andamos con bases de datos y sistemas operativos. Así al menos lo hacemos en la UCM.

Al fin y al cabo yo creo que la clave es saber hacer tus propios esquemas mentales de como funciona la POO. Cuando sabes que son los conceptos y como funciona en si te da igual aprender X o Y lenguaje (que obviamente tendrán sus peculiaridades individuales) que se basen en dichos métodos.

1 respuesta
mortadelegle

#11 Pues nos habremos cruzado alguna vez, es donde estoy yo xD.

Zoth

#10 Bueno lo que me quería referir es que serás más fácil de entender que empezar de cero básicamente. No que sea lo mismo pero algo se entenderá y agilizará el aprender.

Gracias pues, buscaré algún manual para ir conociendo c++.

:)

r2d2rigo

Pero me cago en la puta, si el chaval quiere hacer JUEGOS, no vayais recomendandole que se cambie de Java a C++ porque es LO PUTO CONTRARIO de la productividad para hacerlos.

Coje GameMaker, Construct, Unity, DA IGUAL EL LENGUAJE QUE USE, pero HAZ JUEGOS. Si tu lo que quieres es saber como se mueven dos rectangulos y que hay que hacer para que una pelota rebote en ellos pues usa lo que mas te simplifique todo lo que hay de por medio:

  • Crear la ventana grafica.
  • Dibujar los poligonos.
  • Leer el teclado.
  • Comprobar las colisiones.

Usando un framework de juegos? 100 lineas tirando por lo alto. Usando C++ a pelo? No vas a bajar de 2000 y vas a tardar meses.

Si ya lo que quieres es saber como se cargan texturas en memorias, como se dibujan los poligonos individualmente o como se inician contextos graficos pues oye, si, usa C++. O ensamblador ya que estamos y te haces tu propio motor.

3 3 respuestas
mortadelegle

#14 Unreal engine en que se programa? el perfomance code de libgdx?

Es que parece que le estemos mandando a aprender FORTRAN o COBOL.

Ademas si te lees #7 te daras cuenta que digo lo que tu acabas de decir.

Zoth

#14 Bueno sí, la idea era esa, el ejemplo que has puesto, cómo hacer para que colisione X cosas o interactuar con ellas etcétera, eso es lo que buscaba básicamente, o si se podía.

1 respuesta
bornex

#16 Mira yo soy de Java. Y te voy a comentar como va la cosa.

1) Si quieres Java -> libGDX. ¿Porqué? Pues por que tiene portabilidad a Android, HTML5, iOS y PC.
Inconvenientes de usar libGDX
Al no haber programado videojuego en la vida (o por lo menos mi caso), vas a tener que adaptarte a la manera de programar. Olvidate de la manera en la que programas. Crear videojuegos a partir de código crea otro paradigma de programación que tendrás que entender.

Todo esto empezando a usar libGDX, también puedes ponerte a hacerte una engine tu mismo.

Tiempo, tiempo y mas tiempo, videotutoriales, manuales en ingles, libros, etc... Al final, acabaras dejándolo a no ser que seas un puto monje.

Puedes utilizar LWJGL otra librería de mas bajo nivel (con bajo nivel me refiero a que no tiene capa de abstracción como libGDX).

Ya si te pones puedes usar Java 2D y swing o FX (de java 8).

RPV: Programar juegos con código ya sea Java, C++, Python, C, Perl, Ruby on Rails, yoquesetio xdd es difícil y conlleva un tiempo gigantesco para hacerlo autodidacta.

2) Mi recomendación. Cógete Unity, toquetealo, haz cosas, scripts (con C#, JS o Boo) y haz un juego. Conlleva tiempo, pero los conceptos de spritessheets, colisiones, físicas, los iras adquiriendo con forme vayas ganando EXP.

EDIT: http://www.java-gaming.org/ aquí hay bastante información y gente que hace videojuegos con Java.

FrioneL

#14 Siempre puede usar C++ y algun framework, como cocos2dx.

Pero bueno, segun lo que le interese. Si quiere lo mas transparente posible el motor del juego y demas, pues si, que coja GameMaker, Unity, ...

Pero si quiere ver un poco mas el nucleo que todo lo mueve, pues algun framework que te facilite la vida pero no te lo de todo mascado, como Libgdx, Cocos2dx...

eZpit

Yo me meti con cocos2d-x porque usaba c++, era free y opensource. Esta bien porque quieras o no acabas tocando muchos temas de memoria, caches, gestión de texturas, físicas bastante a pelo e incluso openGL, y vas entendiendo cosas propias del motor.

En cambio, si lo que quieres hacer juegos, a día de hoy tienes soluciones brutales como Unity que te abstraen de todo ese conocimiento y te facilitan mucho al labor con herramientas sencillas y te minimizan el sufrimiento de portar el juego e integrar cosas especificas de cada plataforma. Y no por ello son peores, pues automatizan y optimizan a prueba de tontos, así que puedes hacer algunas "burradas" que luego el motor ya te lo arregla.

Como bien dicen, depende de cual sea tu objetivo, te recomendaria un camino u otro:
1º Si quieres aprender a programar y el funcionamiento de un motor, a la par que haces juegos:libgdx, cocos2d-x, o cualquier otra libreria/framework que encuentres.
2º Si quieres hacer juegos de un modo rápido y eficiente: Unity / Unreal / Gamemaker etc...

B

Por supuesto que se pueden hacer juegos en Java. Si, como dices, solo quieres afianzar tus conocimientos de Java olvidate de iOS, HTML5, Android y demás historias si todavía no sabes como hacer un juego. Cualquier framework te servirá, aunque yo creo que LibGdx es el más popular ahora mismo y te será fácil encontrar información.

Esto es el TL;DR del mensaje, haz lo que dicen por arriba y usa LibGdx. Si sabes Java, creo que te será más comodo usar LibGdx que GameMaker, porque imagino que tendrás mano con Eclipse/Netbeans/IntelliJ.

Yo C++ solo lo aconsejo para los que se plantean en serio trabajar haciendo videojuegos. Si solo quieres "hacer tu juego", tira con lo que ya sepas (o empieza con algo sencillo como Game Maker).

1 respuesta
9 días después
BLZKZ

#20 claro, porque ninguna compañía usa motores hechos por otros. Por eso el 60% de los AAA de 360/ps3 usaban ue3/3.5

XD en fin

1 respuesta
B

#21 para los puestos de programador suele ser requisito imprescindible saber C++. La experiencia en UE o Unity es deseable pero muchas veces no es un requisito. Podríamos discutir la mejor manera de empezar a hacer juegos (y de hecho yo recomiendo empezar con GM o lo que ya sepas usar), pero en algun momento (que yo siempre recomiendo que sea cuando uno ya sepa programar un poco y a hacer juegos) hay que plantearse pasar por el tramite de C++.

No es sencillo pero es lo que hay ahora mismo.

2 respuestas
Srhoud

#22 Pero es que el tema de C++ no es tanto por saber programar en ese lenguaje, si no por el hecho de que para poder programar un juego en C++ tienes que tener ciertos conocimientos o te metes un tiro y con suerte haces un mojón xD

En Java si que se pueden hacer juegos, sin ningún problema, libgdx is your friend. Sin ir más lejos, en el curro ahora mismo yo estoy haciendo un visualizador 3D usando Java 3D. Eso si, la optimización no es lo de java, igual que lo de instanciar muchos objetos muy rápido

BLZKZ

#22 pero es que saber usar c++ no implica saber hacer juegos con c++ xD

Vamos, si quieres hacer juegos es totalmente estúpido ponerte a aprender c++. De hecho dudo mucho que sepas lo que estás diciendo XD

1 respuesta
mortadelegle

#24 Yo diría que antes de aprender a hacer juegos en C++, estaría bien aprender C++.

Porque si vienes de otro lenguaje, otro paradigma puedes hacer las cosas de forma que funcionen, pero no de la forma en la que c++ hace las cosas, normalmente vas a acabar haciendo codigo redudante y mal optimizado.

1 respuesta
BLZKZ

#25 es una locura tener que aprender c++ para hacer juegos, es totalmente absurdo. Y mucho más cuando una vez aprendas c++ verás que no sabes una puta mierda de hacer juegos con c++ XD

De hecho si te pones a hacer un juego al estilo "C++" que dices, te aseguro que te saldrá una mierda infumable de rendimiento. Para hacer las cosas bien deberías usar trucos, sin contar con los punteros que te pueden joder la vida y suerte para depurarlo en un juego entero hecho a mano.

Básicamente recomendáis que un tío que quiera hacer juegos haga:

  1. Aprenda c++ (lo cual no es trivial)
  2. Aprenda a programar las herramientas para hacer el juego (game engine, fisicas...)
  3. Haga el juego.

Es completamente absurdo cuando ni la mayoría de compañías que se dedican a esto se hacen sus propios motores.

Dejad de decir estupideces.

1 respuesta
B

#26 Es que no tienes que aprender C++ para hacer juegos, tienes que aprender C++ tan sólo si te planteas en serio trabajar en la industria del videojuego. Unica y exclusivamente en ese caso es cuando he matizado que hay que asumir que va a tocar, en algun momento, sentarse a aprenderlo. Porque si no te vas a caer en la prueba técnica de la mayoría de empresas.

Simplemente por ese comentario no significa que este en el bando de los que recomiendan empezar aprendiendo C++ y hacerse su propio motor. Precisamente mi consejo es que, si quieres hacer juegos, haz juegos como puedas ASAP (siempre linko el Make Games de Derek Yu).

1 respuesta
BLZKZ

#27 "Es que no tienes que aprender C++ para hacer juegos, tienes que aprender C++ tan sólo si te planteas en serio trabajar en la industria del videojuego."

Dime una sola razón por lo que dices eso que está en negrita.

2 respuestas
KeTo

#28 Porque trabaja en Remedy y sabe cómo funciona el mundillo.

La cosa se ha ido de las manos, #1 preguntó por Java, yo le respondí y luego le pregunté a #4 que cuál sería el paso recomendable si te quieres dedicar a esto y me respondió que aprender C++. No le deis más vueltas.

2 respuestas
BLZKZ

#29 Y si trabajara en Epic? O si trabajara en Cryteck? Y en EA?

Se hace un motor, y luego se programan durante años juegos con ese motor. De hecho algunos hasta se programan en lua XD

En fin, ahora sólo vas en serio si te vas a meter a hacer un juego tú solo todo desde 0.

Por cierto #29 , Greyshock no va en serio ni se quiere dedicar a esto? La gente de Super Meat Team tampoco? Ni Phil Fish ni Jonathan Blow, tampoco Markus Persson

1