【问题标题】:Libgdx background issue [duplicate]Libgdx背景问题[重复]
【发布时间】:2015-05-13 17:03:01
【问题描述】:

所以我正在创建一个启动画面,我希望背景填满整个屏幕。

但是通过使用这个代码它不起作用,它只填满了屏幕的一部分。

代码如下:

用于初始化相机和其他东西:

public SplashScreen(Jump game)
{
    this.game = game;   

    cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    cam.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    sb = new SpriteBatch();
}

这是在屏幕上绘制背景的代码:

public void render(float delta) 
{
    Gdx.gl20.glClearColor(0.2F, 0.6F, 1F, 1F);

    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);

    cam.update();

    sb.begin();

    sb.setProjectionMatrix(cam.combined);

    sb.draw(Assets.splash_spr_background, 0, 0);

    sb.end();

}

最后是初始化背景精灵的代码:

public static Texture splash_tex_background;

public static Sprite splash_spr_background;

public static void init()
{   
    splash_tex_background = new Texture(Gdx.files.internal("Splash Screen/background.png"));

    splash_tex_background.setFilter(TextureFilter.Linear, TextureFilter.Linear);

    splash_spr_background = new Sprite(splash_tex_background);
}

这显然不起作用(这就是我发布这个的原因),这是我运行程序时的样子:

现在我的问题如下:

·如何让背景填满整个屏幕?

·我做错了什么/忘记输入了?

【问题讨论】:

  • 很好,我将如何解决这个问题?
  • 通常你会编辑/重新表述你的第一个问题。如果这不可能,那就写一个新问题,但至少关闭其他问题......
  • 我现在将关闭其他人,但请专注于这个问题,我真的需要解决这个问题。 :)
  • 问题是你的图片和窗口的尺寸不同(精灵不会自动调整到窗口大小),你可以通过使用视口来修复它。你在这个问题的其他副本中没有被告知吗?
  • @Tenfour04 是的,但我不明白我是如何实现它们或使用它们来使精灵填满整个屏幕的,当不帮助我开始时,每个人都会将我重定向到文档。

标签: java camera libgdx viewport scaling


【解决方案1】:

视口管理相机的尺寸,因此您可以在自己的世界单位中工作,而不必担心您的游戏将在不同屏幕上的大小和形状。您通过为它指定您希望可见的游戏的固定宽度和高度来实例化视口。 (不适用于 FillViewport,但不要使用那个。)

因此,固定宽度和高度是常量,不应基于graphics.getWidth() 进行定义。只需在类的顶部将它们声明为固定常量即可。

private static final float WORLD_WIDTH = 1280;
private static final float WORLD_HEIGHT = 720;

在你的情况下,你有一个固定的背景大小。为了让它在所有屏幕上都能正常工作,您需要使用 StretchViewport 或 FitViewport。它们的缺点是分别会扭曲您的游戏或在游戏周围放置黑条。

所以我建议改用 ExtendViewport,但是你需要对你的背景做一些不同的事情。例如,如果您使用 4:3 的世界大小比例,请绘制与您的世界高度相同高度的 16:9 背景图像。或者,如果使用 16:9 的世界尺寸比例,请绘制与您的世界尺寸相同宽度的 4:3 背景图像。这是手机和平板电脑的两种极端屏幕比例。

但是为了简单地继续这个例子,让我们只使用一个 StretchViewport。

这样设置:

Viewport viewport;

public SplashScreen(Jump game)
{
    this.game = game;   

    cam = new OrthographicCamera(); //don't need to give your camera dimensions. Viewport will manage its size

    viewport = new StretchViewport(WORLD_WIDTH, WORLD_HEIGHT, cam);

    sb = new SpriteBatch();
}

然后在您的resize 方法中,您告诉视口根据窗口的尺寸更新相机:

public void resize(int width, int height) {
    viewport.update(width, height, true); //Put true here if you want (0,0) aligned with bottom left corner of screen
}

【讨论】:

    猜你喜欢
    • 2015-07-23
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多