Juego RPG en Java

Spacelord

Yo también estoy haciendo un RPG 2D con libGDX. De momento estoy documentándome, leyendo manuales y viendo vídeos aún, pero todavía no he visto nada que necesite hacer en el juego que no se pueda hacer con libGDX.

Y dios bendiga a dermetfan por esos tutoriales. :D

autlos

#30 No entiendo por qué todo el mundo dice eso xD. Puedes adaptarlo a tus necesidades. Yo por ejemplo en el juego que estoy haciendo ahora he hecho un sistema de componentes para los actores que me ahorra tener mil clases heredando mierdas.

1 respuesta
locof

#29 Estaré haciendo algo mal o me faltará algo, me pinta el sprite pero no responde a los movimientos (Y he comprobado que entra en el key W)

public class ActorPlayer extends Actor implements InputProcessor{
	
private Vector2 velocity = new Vector2();
private TiledMapTileLayer collisionLayer;
private String key = "";
private Sprite sprite;
private float tiledWidth, tiledHeight;

public ActorPlayer(Sprite sprite, TiledMapTileLayer collisionLayer){
	this.sprite = sprite;
	this.collisionLayer = collisionLayer;
	tiledWidth = collisionLayer.getTileWidth();
	tiledHeight = collisionLayer.getTileHeight();
}

@Override
public void draw(SpriteBatch batch, float parentAlpha) {
		update(Gdx.graphics.getDeltaTime());
        batch.draw(sprite, getX(), getY());
}

@Override
public void act(float delta) {

}

private void update(float delta) {
	//addAction(Actions.moveTo(getX(), getY() + tiledWidth, 10000));
}

@Override
public boolean keyDown(int keycode) {
	switch(keycode){
		case Keys.W:
			key = "W";
			this.addAction(Actions.moveTo(getX(), getY() + tiledWidth, 1));
			break;
		case Keys.A:
			key = "A";
			velocity.x = -tiledWidth / tiledWidth;
			break;
		case Keys.D:
			key = "D";
			velocity.x = tiledWidth / tiledWidth;
			break;
		case Keys.S:
			key = "S";
			velocity.y = -tiledHeight / tiledHeight;
			break;

	}
	return true;
}
1 respuesta
locof

Creo que me falta un "Stage" que no sé para que vale, que debe llamar al act que no sé que debe contener xD.

Seguiré viendo

1 respuesta
Lecherito

#32 Yo te lo digo, que hasta algunos programadores de libgdx no quieren ni ver scene2d para el juego xDDD

DaRk-eXe

#34 yo solo uso stage2d para hacer GUI y poco mas.. el resto va todo de forma normal.

autlos

#33 Yo no soy muy de meter el InputProcessor en el jugador.

A priori en esa clase tienes unas cuantas cosas raras: no haces nada con velocity.x, el código en los demás casos debe ser como en el case Keys.W pero con el cambio que corresponda. ¿String key para qué lo usas?

y para decirte si te falta algo más tienes que poner la Screen en la que creas el actor.

En la clase principal creas una stage, creas actores, añades los actores a la stage.
Stage tiene act() y draw() para actualizar la lógica y dibujar los actores que hayas añadido. el método act() es el equivalente al update(), así que quítalo.

locof

code shit

locof

Bueno la clase TileMapGame no tiene mucho misterio.

La clase Player, es el jugador. Utilizo un TextureAtlas para Sprites en movimiento, de ahí el
"public Player(Animation down, Animation left, Animation up, Animation right"

Lo que hay dentro del update es para que se mueva según pulsas W, A, D o S, y que el movimiento "tarde" en realizarse, para que no se mueva sin control y de forma continua. (Mi intención es que se mueva similar a pokemon)

Los velocity son siempre 1 si se pulsa alguna tecla, y en el update hago que siempre se muevan el tamaño del tileWidth/Height, para que siempre caiga dentro de un cuadrado. He hecho el for en el update para intentar simular el desplazamiento de X a Y como el moveTo en los actores, pero se lo pasa por el forro xD lo hace demasiado rápido.

Objetivo: Hacer que el muñeco se mueva de X a Y con una velocidad Z (que tarde los segundos que diga) y que en ese movimiento, ademas de que siempre caiga en un tile (20x20 en mi caso), se reproduzca el movimiento del TextureAtlas.

autlos

Los bucles for de tu método update me han dado cáncer y he tenido que dejar de leer. Lo siento pero no veo por dónde coger tu código. No puedo decirte correcciones puntuales porque está de seleccionar todo + suprimir. Nada de lo que has puesto funciona así, bueno, menos la clase TileMapGame, que ahí están bien las 5 líneas.

Busca tutoriales por youtube con lo básico, que te veo bastante verde. Ya verás como si vas poco a poco las cosas van haciendo clic en tu cabeza y lo vas entendiendo todo.

1 respuesta
locof

#40 pues a mi me funciona xD evidentemente falta codigo. Lo de los for es una paranoia que había intentado hacer. Evidentemente es mierda xD, solo estoy probando cosas

1 respuesta
autlos

#41 El caso es que te complicas tanto para conseguir algo sencillo, que automáticamente convierte lo que has hecho en basura (sin ánimo de ofender, conseguir que te funcione de esa manera es todo un logro).

Has dicho que es para un proyecto de fin de máster. Supongo que deberías aspirar a algo más que a que simplemente funcione. Thread.sleep (20);

1 respuesta
locof

#42 leche pero que no tengo ni zorra, solo es lo que he conseguido hacer en 3 horas. XD

Evidentemente no voy a dejarlo así, solo es para ver que al menos hace algo xD

FrioneL

Esto es lo que pasa por empezar a usar frameworks que te dan cosas ya hechas sin entender realmente como funciona lo que hay por debajo.

Antes de ponerte a picar codigo, yo que tu miraria algo de teoria de como funciona un videojuego, el main loop, con sus updates y sus pintados, lo que son las escenas, los sprites con animaciones, etc, etc.

Una vez sepas como va por debajo, dejate de usar Actions y cosas para automatizar los movimientos y curratelos tu controlando iteracion a iteracion el recorrido de los sprites. Cuantas menos cosas hechas utilices, mas aprenderas. De hecho, si va a ser un juego simple, casi te sugeriria que lo hicieses tu todo desde 0, con su opengl y demas.

Y luego un consejo que no va a malas y que es fundamental para sobrevivir en el mundo del desarrollo, es que antes de preguntar cosas, asegurate de que lo has intentado todo y que es imposible que lo consigas sin ayuda. Intenta mil cosas, busca tutoriales, debuga, ... Preguntarlo te va a acortar las cosas si, pero no vas a aprender ni la mitad que experimentando por ti mismo y al final, consiguiendolo.

1 respuesta
locof

#44 Mañana que no hay curro me pondré a mirarme teoría para tener una idea, porque si, la necesito.

Lo de empezar de cero, cero, es que no es el objetivo de lo que tengo que hacer. De hecho me han llegado a decir que si no quiero hacer interfaz gráfica, que no lo haga. Solo quieren ver funcionalidad. Pero quería aprender un poco y al menos darle un aspecto básico y agradable a lo que es la lógica del juego.