Libgdxフレームワークに問題があります。 Spriteを拡張するクラスを作成しようとしましたが、レンダリングするときにbody
がスプライトのテクスチャと揃っていないことがわかりました。ここでLibgdx Box2D本体とスプライトの整列問題
問題を示す画像である。
あなたは以下のコードを参照することができます
public class GamePlay implements Screen {
private GameMain game;
private OrthographicCamera mainCamera;
private Viewport viewport;
private OrthographicCamera b2dcam;
private Box2DDebugRenderer debugRenderer;
private World world;
private Texture background;
private Brick brick;
float timer = 0;
public GamePlay(GameMain game)
{
this.game = game;
mainCamera = new OrthographicCamera(GameInfo.WIDTH, GameInfo.HEIGHT);
mainCamera.position.set(GameInfo.WIDTH/2, GameInfo.HEIGHT/2,0);
viewport = new FitViewport(GameInfo.WIDTH, GameInfo.HEIGHT, mainCamera);
b2dcam = new OrthographicCamera();
b2dcam.setToOrtho(false, GameInfo.WIDTH/GameInfo.PPM, GameInfo.HEIGHT/GameInfo.PPM);
b2dcam.position.set(GameInfo.WIDTH/2f, GameInfo.HEIGHT/2f, 0);
debugRenderer = new Box2DDebugRenderer();
world = new World(new Vector2(0,0), true);
background = new Texture("BGS/GameBG.png");
brick = new Brick(world, "my brick");
brick.setBricksPosition(cgp(20), cgp(20));
}
//region Screen Methods
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
game.getBatch().begin();
game.getBatch().draw(background,0,0);
brick.draw(game.getBatch());
game.getBatch().end();
debugRenderer.render(world, b2dcam.combined);
world.step(Gdx.graphics.getDeltaTime(), 6,2);
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
background.dispose();
}
//endregion
private float cgp(int gridPos)
{
return gridPos * GameInfo.gridSize;
}}
public class Brick extends Sprite {
private World world;
private Body body;
private String name;
private Fixture fixture;
public Brick(World world, String name)
{
super(new Texture("Bricks/brick.png"));
this.world = world;
this.name = name;
}
void createBody()
{
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set((getX() - getWidth())/ GameInfo.PPM, (getY() + getHeight()/2)/ GameInfo.PPM);
body = world.createBody(bodyDef);
PolygonShape shape = new PolygonShape();
shape.setAsBox((getWidth()/2)/GameInfo.PPM, (getHeight()/2)/GameInfo.PPM);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixture = body.createFixture(fixtureDef);
shape.dispose();
}
public void setBricksPosition(float x, float y)
{
setPosition(x,y);
createBody();
}
public void draw(SpriteBatch batch)
{
batch.draw(this, getX(), getY());
}}
MCVEへのコードを減らしてください: – kebs