¿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?
Recibe ayuda de expertos
Es gratis y fácil
Respuestas, votos y comentarios
Recibe puntos, vota y da la solución
¿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