I have a problem with scale in box2d and libgdx, I’m trying to put a image (sprite or texture or other, the case is dot I need put a image in a body) in a body, but the image don’t show correctly.
When I run the game pass this:
My class:
BaseClass.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() {
}
}
I triyed many options, but I can’t put the image in the body…
My head will be exploded ???
Atte: A noob with Box2D.
P.D: I’m spanish. :persecutioncomplex: