Juego RPG en Java

locof

Os escribo por si alguien tiene experiencia en programar juegos en Java. Ya se que es mejor C# etc, pero quiero hacerlo en java, simplemente es un TFM que quiero quitarme de en medio, no va a ser un juego potente ni nada que Java no pueda tirar, además, así mi director de proyecto puede probarlo en cualquier plataforma, y tengo conocimiento de sobra en el lenguaje, que va a hacer que me resulte mucho más cómodo el programarlo.

La cosa es que no se qué librerías usar. El juego será un RPG con movimiento grid, y estaba pensando en hacer batallas aleatorias.

Alguna ayuda? :(

YaW

Echale un vistazo a Libgdx: http://libgdx.badlogicgames.com/

2 respuestas
m4andg4

Una pregunta Yaw, ¿libgdx es gratuito? yo también estaba más menos interesado en empezar algo así y no tengo muchos recursos económicos...

locof

#2 Jumm tiene buena pinta. No he mirado mucho, supongo que es una librería que se importa y ya está no?

Alguien lo ha probado? opiniones?

1 respuesta
YaW

Libgdx es totalmente gratuito tanto para hacer juegos en pc, Android o iOS.

Nuestro último juego está hecho con libgdx y sólo tengo palabras buenas, es un framework cojonudo.

En su web hay documentación para empezar

Drhaegar

#4 El sábado empece a programar mi primer videojuego escogiendo Libgdx como framework y por ahora no he tenido ningún problema, hay un montón de tutoriales en la web y se puede exportar a todas las plataformas menos a WF.

1 respuesta
locof

#6 Genial :) Hay plugins o algo que facilite el uso? (para eclipse por ejemplo)

1 respuesta
Dokami

Yo empecé a usarlo hace poco y me mire un tutorial empezando a mirar los Tiled Map de los juegos y luego implementarlo en java :3.
Aqui te dejo el link del tutorial:

1
Lecherito

Os recomiendo #libgdx@freenode, uno de los mejores canales de IRC que he visto en mucho tiempo. Están tanto los desarrolladores como los usuarios siempre hablando y ayudan la hostia.

Drhaegar

#7 Yo no he encontrado ninguno, aunque también es cierto que apenas he mirado xD

FrioneL

Si lo que buscas es multiplataforma, te recomiendo cocos2dx, que es c++ y tiene muchas mas facilidades que libgdx. Yo he probado ambos frameworks y no hay color. Aunque si no tienes mucha idea quizas te resulte mas comodo libgdx, mas que nada porque hay mas tutoriales y tal.

1 respuesta
mortadelegle

#11 Yo soy mas de SFML, pero si el muchacho quiere hacerlo en Java pues que lo haga en Java.

Mientras que no pretendas hacer algo que requiera un porron de recursos no debería pasar nada.

1 respuesta
locof

#12 No si como ya digo es para un Trabajo de fin de máster. No tengo tiempo para hacer algo guay xD Con que se muevan los enemigos, y salgan batallas en plan RPG me conformo. (Todo en plan sprites)

locof

#2 En todos los tutoriales que veo se instalan el SDK de Android. Entiendo que no es necesario para programar el juego para PC, no?

1 respuesta
Lecherito

#14 No, bajate libgdx setup-ui, esto te creará el proyecto core, el de escritorio, android, ios y web. Pero en eclipse por ejemplo importa solo el core + escritorio y punto.

locof

Alguien sabe de algún juego 2D de prueba? me gustaría ver como están hechas las cosas antes de ponerme a ello. He visto en la página de la librería pero no consigo que funcionen...

1 respuesta
DaRk-eXe

#16 que te pasa ? porque no te van?

1 respuesta
locof

Me he bajado este https://github.com/libgdx/libgdx-demo-cuboc

Importo el proyecto a Eclipse

Primero que no me sale el desktop, y segundo que intento lanzarlo pero dice que no tiene clase main. (Lo de android, html, e ios me sobra, ya que lo quiero para desktop) Puede que simplemente no esté implementado... no se...

Luego me he bajado este: https://github.com/libgdx/libgdx-demo-superjumper Pero directamente no me deja importarlo a eclipse (no entiendo lo de Gradle

spoiler

, no me sale nada parecido en eclipse )

Voy a seguir intentando con mas, a ver si encuentro alguno...

1 respuesta
locof

#17 Todos los que encuentro son para android... (que sean en 2D...) :S

1 respuesta
DaRk-eXe

#18 no tienes el desktop porque no lo habras marcado desde el setup-ui.

si no tienes iOS, puedes borrar el robovm, te dará menos prroblemas.

sobre el de android, casi seguro que es porque en el android manifest que viene por defecto, no tiene bien puesto el android-version, creo que se arreglaba dandole con e lboto nderecho al proyecto, propiedades y ahí marcas la version de android que vas a usar.

El de html era algo con el archivo WAR, creo que si le dabas al boton derecho en el error tiene opcion de quick fix y te lo arregla.

El del main, podrías copiar el error y vemos cual es, que no recuerdo todos los problemas que daba eso de primeras con eclipse.

1 respuesta
DaRk-eXe

#19 Gradle es un framework para Android para importar dependencias y separar el development de produccion y todo eso tan chuli estilo spring mvc, ( para el juego que estoy haciendo ahora con libgdx tengo pensado migrar mi proyecto a gradle pero no lo he usado nunca tp ).

Supongo que si el proyecto esta hecho con gradle, tendras que instalar los plugins de gradle en eclipse, pero si no, puedes ir copiando y pegando archivos en tu proyecto de eclipse como si fuera normal y obviando las partes de gradle.

locof

#20 La cosa es que no me he creado un proyecto propio con el setup-ui, simplemente me he descargado el archivo y lo he importado.

Cuando creo un proyecto propio con el setup-ui si me funciona, me sale la típica pantallita inicial de la librería.

No quería complicarme la vida y pensaba que descargando un proyecto tal cual e importandolo en eclipse bastaría para trastear con él y ver como funcionan las cosas :P

1 respuesta
DaRk-eXe

#22 pus ahi tienes el tema, pero que lo del desktop es facil, creas un nuevo proyecto y pones el wrapper de escritorio..

aqui te pongo el wrapper de desktop, cambia el new Scroller2d() por tu juego y quita el desktopresolver y ya deberia funcionarte


import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;

public class Main {
	public static void main(String[] args) {
		LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
		cfg.title = "scroller2d";
		cfg.useGL20 = false;
		cfg.width = 800;
		cfg.height = 600;

	Scroller2d.setPlatformResolver(new DesktopResolver());
	
	new LwjglApplication(new Scroller2d(), cfg);
}
}
1 respuesta
locof

#23 He hecho esto, y me sale la pantalla en negro menos de un segundo y se cierra

PD: Cómo pones el código así? xD

1 respuesta
DaRk-eXe

#24 usando [ code ] y [ /code ], mm pero ya no tienes errores no? seguro que lo que te has bajado esta bien? da algo mas de info..

1 respuesta
locof

#25 Sorry, estoy en el curro y ahora estoy pillado de tiempo, a ver si me pongo mas tarde y os comento

locof

Ya estoy haciendo cosilla, pero tengo una duda.

He conseguido que el jugador se desplace de tiled en tiled (son de 16x16). pero se desplaza "teletransportándose", y quiero que cuando pulses W por ejemplo, vaya hacia arriba con una velocidad Y, y se pare justo en el siguiente tiled.

Sugerencias? :(

Código: (Solo funciona "hacia arriba" con W)

        private void update(float delta) {

}

@Override
public boolean keyDown(int keycode) {
	float tiledWidth = collisionLayer.getTileWidth();
            float tiledHeight = collisionLayer.getTileHeight();
	switch(keycode){
	case Keys.W:
		/*key = "W";
		velocity.y = speed;*/
		setY(getY() + tiledHeight);
		setX(getX());
		break;
	case Keys.A:
		velocity.x = -speed;
		break;
	case Keys.D:
		velocity.x = speed;
		break;
	case Keys.S:
		velocity.y = -speed;
		break;

}
2 respuestas
Lecherito

#27 Pues si usas actores tienes las Actions y si no, el Universal Tween Engine que lo que hace es si tienes un objeto con una propiedad a 1 y le dices que la ponga a 10 en 3 segundos, lo hace a lo animación suave.

autlos

#27 Te recomiendo que aprendas a usar las clases Stage y Actor. Al principio puedes entender mejor las cosas si lo haces todo tú, pero es que scene2d funciona jodidamente bien y te ahorra trabajo.

  

float tiledWidth = collisionLayer.getTileWidth();
                float tiledHeight = collisionLayer.getTileHeight();
                switch(keycode){
                case Keys.W:
                        addAction(Actions.moveTo(getX(), getY() + tiledWidth, tiempoQueTardaEnMoverseHastaAhí));
                        break;
              

Además comprueba que no se esté moviendo ya y voilá.

edit, no sé qué cojones he hecho que el

 se ve como el culo.
2 respuestas
Lecherito

#29 scene2d se queda muy muy corto cuando quieres hacer algo medianamente avanzado

1 respuesta