java - LibGDX 1.5,如何拉伸(stretch)以适应宽度

标签 java android libgdx sprite viewport

过去几天我开始研究 libGDX,我能够设置项目并使用 SpriteBatch 绘制一些 Sprite ,但现在我被卡住了。

我在屏幕上绘制了一些 Sprite ,它们都在一个 64x64 像素宽的框内,我想拉伸(stretch)它们以适应屏幕尺寸,从而保持宽高比。我想我应该使用视口(viewport),但我真的不明白如何使用它。到目前为止,我的代码如下:

@Override
public void create () {

    cam = new OrthographicCamera();
    viewport = new FitViewport(64, 64, cam);

    batch = new SpriteBatch();
    ballTex = new Texture("Ball.png");
    balls = new Ball[6];

    balls[0] = new Ball(64 / 2 - BALLSIZE / 2, 64 - BALLSIZE, BALLSIZE, BALLSIZE);
    balls[1] = new Ball(64 - BALLSIZE, 4 * 64 / 5 - BALLSIZE, BALLSIZE, BALLSIZE);
    balls[2] = new Ball(64 - BALLSIZE, 64 / 5, BALLSIZE, BALLSIZE);
    balls[3] = new Ball(64 / 2 - BALLSIZE / 2, 0, BALLSIZE, BALLSIZE);
    balls[4] = new Ball(0, 64 / 5, BALLSIZE, BALLSIZE);
    balls[5] = new Ball(0, 4 * 64 / 5 - BALLSIZE, BALLSIZE, BALLSIZE);

    Gdx.app.setLogLevel(Application.LOG_DEBUG);
}

@Override
public void render () {

    if (Gdx.input.isTouched()) {
        Gdx.app.debug("DEBUG", "touched on coordinates " + Gdx.input.getX() + ", " + Gdx.input.getY());
        Gdx.app.debug("DEBUG", "ball size: " + balls[0].getX());
    }

    Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 0);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    batch.setColor(Color.RED);
    batch.draw(ballTex, balls[0].getX(), balls[0].getY(), balls[0].getWidth(), balls[0].getHeight());
    batch.setColor(Color.ORANGE);
    batch.draw(ballTex, balls[1].getX(), balls[1].getY(), balls[1].getWidth(), balls[1].getHeight());
    batch.setColor(Color.YELLOW);
    batch.draw(ballTex, balls[2].getX(), balls[2].getY(), balls[2].getWidth(), balls[2].getHeight());
    batch.setColor(Color.GREEN);
    batch.draw(ballTex, balls[3].getX(), balls[3].getY(), balls[3].getWidth(), balls[3].getHeight());
    batch.setColor(Color.CYAN);
    batch.draw(ballTex, balls[4].getX(), balls[4].getY(), balls[4].getWidth(), balls[4].getHeight());
    batch.setColor(Color.MAGENTA);
    batch.draw(ballTex, balls[5].getX(), balls[5].getY(), balls[5].getWidth(), balls[5].getHeight());
    batch.end();
}

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

当我以不同于 64x64 的分辨率运行它时, Sprite 不会被拉伸(stretch),但它们保持相同的原始大小,而如果我从 64x64 分辨率开始并稍后调整它的大小,则行为与您预期的一样可以在这些图片中看到(第一个是桌面大小为 128x256,第二个是桌面大小为 64x64,最后一个是 64x64 拉伸(stretch),具有我想要的行为):

Running with desktop size of 128x256

Running with desktop size of 64x64

Running with desktop size of 64x64 and then resized

另外,我发现关于 libGDX 的信息有点困惑,可能是由于版本之间的差异。如果你能给我一些关于我使用的最新版本 (1.5) 的很好的教程,特别是关于相机、屏幕、视口(viewport)的教程,我还不能完全理解,我将非常感激。

最佳答案

渲染 Sprite 时,您似乎没有使用视口(viewport)。 您应该在 create 方法中设置 SpriteBatch 使用的相机

batch.setProjectionMatrix(cam.combined);

关于java - LibGDX 1.5,如何拉伸(stretch)以适应宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28895140/

相关文章:

android - 动态改变渐变中心

libgdx - 从scene2d.ui 表中删除单元格

java - Libgdx 如何在 Action 后执行代码?

java - 将 Kryonet 与 Libgdx 结合使用

java - 带有 Hibernate 的 Spring - 线程 "main"java.lang.NullPointerException 中的异常

android - FusedLocationProviderClient getLastLocation elapsedRealtimeNanos moSTLy 当前系统时间

java - Uiautomatorviewer SWT 异常

android - 获取最后位置的经纬度

java - Hadoop Map Reduce For Google web graph

java - 从 NetBeans 迁移到 eclipse,似乎找不到生成的 java 文件