3

我开始学习 libgdx 和它的 scene2d,但我的 splashScreen 遇到了问题。我的淡入淡出动作完美,但图像没有被缩放(即使我在构造函数中添加了缩放)......

我有一个从 png 512x512 加载的 Texture splashTexture,其中真实图像是 512x256,所以我创建了一个 TextureRegion。所有这些都是在我的 show 方法中完成的:

@Override
    public void show() {
    super.show(); //sets inputprocessor to stage

    splashTexture = new Texture(SPLASHADR);

    // set the linear texture filter to improve the stretching
    splashTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
    splashTextureRegion = new TextureRegion(splashTexture, 0, 0, 512, 256);

}

然后在我的调整大小方法中出现以下内容:

@Override
public void resize(int width, int height) {
    stage.clear();
    Drawable splashTextureDrawable = new TextureRegionDrawable(
            splashTextureRegion);

    Image splashImg = new Image(splashTextureDrawable);

    splashImg.getColor().a = 0f;
    splashImg.addAction(Actions.sequence(Actions.fadeIn(0.5f),
            Actions.delay(2f), Actions.fadeOut(0.5f)));

    stage.addActor(splashImg);

}

这些是 SplashScreen 类中的函数,它扩展了 AbstractScreen 类(实际上具有渲染函数):

@Override
public void render(float delta) {
    stage.act(delta);

    Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    stage.draw();
}

欢迎任何想法,我一直在查看 javadocs 多年但还没有找到解决方案!

谢谢,

布努纳马克

4

1 回答 1

5

退房stage.setViewport(float width, float height, boolean keepAspectRatio)。听起来您希望图像填满屏幕,因此将舞台的视口宽度/高度设置为图像的宽度/高度:

stage.setViewport(512, 256, false);

有关参数的说明,请参见scene2d wiki 文章keepAspectRatio

setViewport 有一个名为 keepAspectRatio 的参数,它仅在舞台大小和视口大小纵横比不同时才有效。如果为 false,则拉伸舞台以填充视口,这可能会扭曲纵横比。如果为真,则首先缩放舞台以适应最长维度的视口。接下来,较短的尺寸被加长以填充视口,从而防止纵横比发生变化。

如果这不是您想要的,那么本文有几个不同的示例应该涵盖您需要的内容。

于 2013-05-30T16:34:54.217 回答