¿Como hago para que una textura este encima de otra textura? es decir que una textura este encima de una plataforma cuando se desplace o salte ,que no traspase y se quede encima
de ella.
¿Como se debería hacer?
¿Como hago para que una textura este encima de otra textura? es decir que una textura este encima de una plataforma cuando se desplace o salte ,que no traspase y se quede encima
de ella.
¿Como se debería hacer?
Hola @carla_Maria,
Lo que mencionas en el mundo del desarrollo de videojuegos se lo conoce como colisiones, Hay varias formas de detectar una colisión, la mas usada es la colisión rectangular ( bounding box collision ), hay colisiones por píxeles o algoritmos para cuando tu sprite es circular o irregular.
Según entiendo tu pregunta, lo que deseas es un escenario donde haya gravedad y una plataforma, tienes 2 opciones:
Para poder usar Box2D en conjunto con Libgdx es necesario que definas el mundo y la gravedad, asi como agregar los cuerpos con sus propiedades, hay varios tipos de cuerpos, los estaticos, los dinamicos y los kinematicos.
Primero define las variables en tu clase:
public class ExampleGame extends ApplicationAdapter {
private SpriteBatch batch;
private Sprite player;
private World world;
private Body spriteBody;
private Body floorBody;
private final float PX_TO_METERS = 80f;
batch
el batcher para el render
player
el sprite del juego
world
el mundo
spriteBody
el cuerpo del sprite para el mundo
floorBody
el cuerpo estatico del piso
PX_TO_METERS
Ya que box2d no usa pixeles sino metros ( MKS ) tenemos que tener una relacion para las medidas, ( http://box2d.org/2011/12/pixels/ )
en tu metodo create
define el mundo, el sprite y crea los cuerpos.
@Override
public void create () {
// definimos el batch
batch = new SpriteBatch();
// definimos el nuevo mundo con gravedad
world = new World(new Vector2(0, -98f), true);
// creamos el sprite con textura y definimos el tamaño y su posicion
player = new Sprite(new Texture(Gdx.files.internal("player.png")));
player.setSize(50, 50);
player.setPosition(
Gdx.graphics.getWidth() / 2 - player.getWidth() / 2,
Gdx.graphics.getHeight() / 2
);
// definimos el cuerpo del sprite
setSpriteBody();
// definimos el cuerpo del piso
setFloorBody();
}
las funciones setSpriteBody
y setFloorBody` definen los cuerpos y sus propiedades.
setSpriteBody:
private void setSpriteBody() {
// 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(player.getX(), player.getY());
// agregamos el cuerpo al mundo
spriteBody = world.createBody(bodyDef);
// creamos un poligono en forma de caja con medidas de
// acuerdo al sprite
PolygonShape shape = new PolygonShape();
shape.setAsBox(player.getWidth()/2 / PX_TO_METERS, player.getHeight() /2 / PX_TO_METERS);
// definimos las propiedades del cuerpo
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = 1f;
// agregamos las propiedades al cuerpo
Fixture fixture = spriteBody.createFixture(fixtureDef);
// la forma del cuerpo no servira mas de ahora en adelante
shape.dispose();
}
setFloorBody:
private void setFloorBody()
{
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.StaticBody;
bodyDef.position.set(0, 0);
floorBody = world.createBody(bodyDef);
PolygonShape shape = new PolygonShape();
shape.setAsBox(Gdx.graphics.getWidth(), 0);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = 1f;
Fixture fixture = floorBody.createFixture(fixtureDef);
shape.dispose();
}
El metodo render
:
@Override
public void render()
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// actualizamos el mundo en cada frame
world.step(Gdx.graphics.getDeltaTime(), 6, 2);
// actualizamos la posicion del sprite de acuerdo a la posicion del cuerpo
// en el mundo
player.setPosition(spriteBody.getPosition().x, spriteBody.getPosition().y);
batch.begin();
player.draw(batch);
batch.end();
}
el resultado:
si deseas ver todo el codigo te dejo el proyecto: https://db.tt/W80kcXx2
Libgdx Box2d Github
LibGDX Tutorial 13: Physics with Box2D Part 1: A Basic Physics Simulations.
http://tutoriales.tiarsoft.com/p/tutoriales-de-box2d-con-libgdx.html