为什么我的背景图片在libGDX中延伸?

时间:2018-02-14 08:41:01

标签: java android libgdx

这是我在libGDX中的第一次尝试,我之前没有看到这样的问题,谷歌搜索也没有帮助。我试图显示背景的内容,稍后我会做出这个动作,但对我而言,实际显示图像是一个很好的开始。它显示,但它已拉出(见下图)

enter image description here

我的代码是:

private BombArrangement game;
private OrthographicCamera gameCamera;
private Viewport gamePort;
private Texture backGroundTexture;

public PlayScreen(BombArrangement game) {
    this.game = game;
    gameCamera = new OrthographicCamera();
    gamePort = new FitViewport(BombArrangement.V_WIDTH, BombArrangement.V_HEIGHT, gameCamera);

    backGroundTexture = new Texture("startbackground.png");
}

@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.batch.begin();
    game.batch.draw(new TextureRegion(backGroundTexture, 0, 0, BombArrangement.V_WIDTH, BombArrangement.V_HEIGHT), 0, 0);
    game.batch.end();
}

@Override
public void resize(int width, int height) {
    gamePort.update(width, height);
}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {

}
}

我尝试了几个像textureregions,sprite等等的东西但是所有这些都给出了这个结果。

2 个答案:

答案 0 :(得分:0)

作为对您上次评论的回复:

您现在正确缩小高度,但宽度保持不变。尝试将宽度乘以向下缩放高度的相同数量,以便对注释中链接的代码进行一些更改(未测试):

private Texture texture;
private int x1, x2, speed, scaledHeight, scaledWidth;

public StartBackground() {
    texture = new Texture("startbackground.png");

    x1 = 0;
    x2 = texture.getWidth();
    speed = 5;
    float imageRatio = Gdx.graphics.getHeight() / texture.getHeight();
    scaledHeight = (int) (texture.getHeight() * imageRatio);
    scaledWidth = (int) (texture.getWidth() * imageRatio);
}

public void updateAndRender(float deltaTime, SpriteBatch spriteBatch) {
    x1 -= speed;
    x2 -= speed;

    // If image is off screen and not visible
    if (x1 + texture.getWidth() <= 0) x1 = x2 + texture.getWidth();
    if (x2 + texture.getWidth() <= 0) x2 = x1 + texture.getWidth();

    // Render
    spriteBatch.draw(texture, x1, 0, scaledWidth, scaledHeight);
    spriteBatch.draw(texture, x2, 0, scaledWidth, scaledHeight);
}

答案 1 :(得分:0)

不完全确定你想做什么,但我用它在我的主菜单中渲染我的背景:

    //Camera
    camera = new OrthographicCamera();
    camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    //Viewport
    ScreenViewport viewport = new ScreenViewport(camera); 

    //Background
    backgroundImage = new Texture(pathToImage);

    //Stage 
    stage = new Stage();
    stage.setViewport(viewport);

(这位于我的构造函数和摄影机中,backgroundImage和stage是我班级中的字段)

在渲染方法中 (ConfigData保存应用于游戏的设置数据; DEFAULT_WIDHT和-HEIGHT只是我用于在全屏模式下初始化窗口的一些值;将它们替换为DesktopLauncher中使用的值

config.widht

config.height

):

@Override
public void render(float delta) {

    //Clear screen
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    stage.act();
    stage.getBatch().begin();
    stage.getBatch().draw(backgroundImage, 0, 0, ConfigData.DEFAULT_WIDTH, ConfigData.DEFAULT_HEIGHT);
    stage.getBatch().end();

    stage.draw();
}

我的调整大小方法:

@Override
public void resize(int width, int height) {
    camera.setToOrtho(false, width, height);
    stage.getViewport().update(width, height);
}

希望这对某些人有所帮助,因为我自己想出了这个并花了一些精力(: