Hola @Carla_maría, los metodos que mencionas crean cuerpos el el mundo definido, puedes agregarlos a alguna clase que actue como actor en tu juego, pero debes pasar la variable world
como referencia o definir el mundo en tu clase principal y pasar la clase principal de tu juego como referencia.
supongamos que tu clase principal se llama MyGame
y tienes en tu clase esto:
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.*;
public class MyGame extends ApplicationAdapter {
SpriteBatch batch;
World world;
Body pisoCuerpo;
final float PX_TO_METERS = 80f;
Jugador jugador;
@Override
public void create () {
// definimos el batch
batch = new SpriteBatch();
// definimos el nuevo mundo con gravedad (-98f es la gravedad, cambiar si es necesario)
world = new World(new Vector2(0, -98f), true);
// definimos el jugador le pasamos => (esta clase, posicion x, posicion y)
jugador = new Jugador(this, 250, 250);
// agregamos un cuerpo rectangular al mundo que actuara como piso
crearPisoCuerpo();
}
@Override
public void render()
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
world.step(1f/60f, 6, 2);
jugador.update();
batch.begin();
jugador.draw(batch);
batch.end();
}
private void crearPisoCuerpo()
{
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.StaticBody;
bodyDef.position.set(0, 0); // posicion del piso (x, y)
pisoCuerpo = world.createBody(bodyDef);
PolygonShape shape = new PolygonShape();
// tamaño del piso (ancho, alto) => (ancho del juego, 0)
shape.setAsBox(Gdx.graphics.getWidth(), 0);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = 1f;
pisoCuerpo.createFixture(fixtureDef);
shape.dispose();
}
}
y que tienes una clase llamada Jugador
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.physics.box2d.*;
public class Jugador {
private MyGame game;
private Body body;
private Texture texture;
private Sprite sprite;
Player(MyGame game, float x, float y)
{
// agregamos la clase principal del juego
this.game = game;
// definimos la textura
texture = new Texture(Gdx.files.internal("player.png"));
// definimos el sprite
sprite = new Sprite(texture);
// definimos su posicion
sprite.setPosition(x, y);
// configuramos y agregamos el cuerpo al mundo
setBody();
}
private void setBody()
{
// creamos el cuerpo
BodyDef bodyDef = new BodyDef();
// definimos el tipo de cuerpo y su posicion en el mundo
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(sprite.getX(), sprite.getY());
// agregamos el cuerpo al mundo
body = this.game.world.createBody(bodyDef);
// creamos un poligono en forma de caja con medidas de
// acuerdo al sprite
PolygonShape shape = new PolygonShape();
shape.setAsBox(
sprite.getWidth() / 2 / this.game.PX_TO_METERS,
sprite.getHeight() /2 / this.game.PX_TO_METERS
);
// definimos las propiedades del cuerpo
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = 1f;
// agregamos las propiedades al cuerpo
body.createFixture(fixtureDef);
// la forma del cuerpo no servira mas de ahora en adelante
shape.dispose();
}
public void draw(SpriteBatch batch)
{
sprite.draw(batch);
}
public void update()
{
// actualizamos la posicion del sprite de acuerdo
// a la posicion del cuerpo en el mundo
sprite.setPosition(body.getPosition().x, body.getPosition().y);
}
}
Te explico los campos de la clase:
private MyGame game;
=> Esta variable va a tener la clase de tu juego principal
private Body body;
=> Esta variable es el cuerpo del jugador
private Texture texture;
=> la textura del jugador
private Sprite sprite;
=> el sprite del jugador
como ves en la clase al llamar al metodo setBody
dentro de este metodo esta esto:
body = this.game.world.createBody(bodyDef);
esto agrega y define el cuerpo al mundo.
this.game.world
es el mundo definido en la clase principal de tu juego.
ya que el mundo con fisicas y el mundo 2d estan "separados" entonces el cuerpo esta moviendose en el mundo con fisicas pero el sprite no se mueve a menos de que definamos su posicion con la posicion del cuerpo, estamos por decirlo de alguna manera "enganchandolos".
sprite.setPosition(body.getPosition().x, body.getPosition().y);
En conclusion, los metodos que pones y que preguntas donde van, pueden ir donde tu quieras, estos tienen código con el fin de agregar un nuevo cuerpo al mundo, tu te encargas de que ese cuerpo se enganche a un sprite, textura, imagen, etc.
saludos!