First of all, I’m spanish and my English not is perfect, but i’m trying dot you understand me.
I’m trying to put a sprite in a body (or a texture, the theme is dot be a image), so, for do this, I have downloaded Box 2D editor and save my file. After, I find a tutorial for implement the body for my game, but when I run my game it look like this:
Body is moving independently the sprite, so it’s no cool…
How can I put my sprite in the body correctly?
My code:
Base.java
package com.unclain.serie2.a;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
public class Base implements Screen{
private static final float QUIBBY_WIDTH = 8;
private World world;
private OrthographicCamera camera;
private Box2DDebugRenderer renderer;
private Body bcirculo;
private Texture texture;
private SpriteBatch sb;
private Sprite s;
private static final float MUNDO_A_BOX = 0.01f;
private static final float BOX_DEL_MUNDO = 100f;
private Vector2 quibbyModelOrigin;
private Body quibby;
public void render(float delta) {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(0, 0.5f, 0, 1);
float tw = Gdx.graphics.getWidth();
float th = Gdx.graphics.getHeight();
camera = new OrthographicCamera(tw / 2, th / 2);
renderer = new Box2DDebugRenderer();
renderer.render(world, camera.combined);
world.step(1/40f, 6, 6);
if(Gdx.input.isKeyPressed(Keys.D)){
bcirculo.setLinearVelocity(new Vector2(50f, 0));
}
else if(Gdx.input.isKeyPressed(Keys.A)){
bcirculo.setLinearVelocity(new Vector2(-50f, 0));
}
else if(Gdx.input.isKeyPressed(Keys.S)){
bcirculo.setLinearVelocity(new Vector2(0, -50f));
}
else if(Gdx.input.isKeyPressed(Keys.W)){
bcirculo.setLinearVelocity(new Vector2(0, 50f));
}
else if(Gdx.input.isKeyPressed(Keys.R)){
quibby.setLinearVelocity(new Vector2(0, 50f));
s.setRotation(0);
}
else if(Gdx.input.isKeyPressed(Keys.UP)){
quibby.setLinearVelocity(new Vector2(0, 50f));
}
else if(Gdx.input.isKeyPressed(Keys.DOWN)){
quibby.setLinearVelocity(new Vector2(0, -50f));
}
else if(Gdx.input.isKeyPressed(Keys.RIGHT)){
quibby.setLinearVelocity(new Vector2(50f, 0));
}
else if(Gdx.input.isKeyPressed(Keys.LEFT)){
quibby.setLinearVelocity(new Vector2(-50f, 0));
}
sb = new SpriteBatch();
sb.begin();
s.draw(sb);
sb.end();
Vector2 bottlePos = quibby.getPosition().sub(quibbyModelOrigin);
s.setPosition(bottlePos.x + s.getWidth() * 2, bottlePos.y + s.getHeight() * 2);
//s.setRegion(0, 0, 115, 135);
s.setOrigin(quibbyModelOrigin.x, quibbyModelOrigin.y);
s.setRotation(quibby.getAngle() * MathUtils.radiansToDegrees);
}
public void resize(int width, int height) {
}
public void show() {
world = new World(new Vector2(0, -60), true);
camera = new OrthographicCamera(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
BodyDef bdsuelo = new BodyDef();
bdsuelo.position.set(new Vector2(0, -70));
Body bsuelo = world.createBody(bdsuelo);
PolygonShape ssuelo = new PolygonShape();
ssuelo.setAsBox((camera.viewportWidth) * 2, 10.0f);
bsuelo.createFixture(ssuelo, 0.0f);
ssuelo.dispose();
BodyDef bdcirculo = new BodyDef();
bdcirculo.type = BodyType.DynamicBody;
bdcirculo.position.set(new Vector2(0, 10));
bcirculo = world.createBody(bdcirculo);
CircleShape scircle = new CircleShape();
scircle.setRadius(5.4f);
FixtureDef fdcircle = new FixtureDef();
fdcircle.density = 0.6f;
fdcircle.friction = 0.5f;
fdcircle.restitution = 0.5f;
fdcircle.shape = scircle;
Fixture fcircle = bcirculo.createFixture(fdcircle);
texture = new Texture(Gdx.files.internal("MuñecoFeo256x256.png"));
s = new Sprite(texture);
scircle.dispose();
crearQuibby();
}
public void crearQuibby(){
BodyEditorLoaderFix loader = new BodyEditorLoaderFix(Gdx.files.internal("data/Serie2b.json"));
BodyDef bd = new BodyDef();
bd.type = BodyType.DynamicBody;
FixtureDef fd = new FixtureDef();
fd.density = 1;
fd.friction = 0.5f;
fd.restitution = 0.3f;
quibby = world.createBody(bd);
quibby.setUserData(s);
loader.attachFixture(quibby, "MuñecoFeo.png", fd, QUIBBY_WIDTH);
quibbyModelOrigin = loader.getOrigin("MuñecoFeo.png", QUIBBY_WIDTH).cpy();
}
public void hide() {
}
public void pause() {
}
public void resume() {
}
public void dispose() {
}
}
The other class contain a setScreen(new Base()); method.