【发布时间】:2015-03-06 08:47:42
【问题描述】:
过去几天我开始研究 libGDX,我能够设置项目并使用 SpriteBatch 绘制一些精灵,但现在我被卡住了。
我在屏幕上绘制了一些精灵,它们都在一个 64x64 像素宽的框内,我想拉伸它们以适应屏幕尺寸,以便保留纵横比。我想我应该使用视口,但我真的不明白如何使用它。到目前为止我的代码如下:
@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 的分辨率运行它时,精灵不会被拉伸,但它们会保持相同的原始大小,而如果我从 64x64 分辨率开始并稍后调整它的大小,则行为与预期的一样可以在这些图片中看到(第一个是桌面大小为 128x256,第二个是桌面大小为 64x64,最后一个是 64x64 拉伸,具有我想要的行为):
另外,我发现关于 libGDX 的信息有点混乱,可能是由于版本之间的差异。如果你能给我一些关于我正在使用的最新版本(1.5)的好教程,特别是关于相机、屏幕、视口,我还不能完全理解,我将非常感激。
【问题讨论】:
-
如果您没有使用
Game和Screen,则可能不会在您的场景中调用resize(...),只有在您手动执行此操作时。在create()方法的末尾添加resize(Gdx.graphics.getScreenWidth(), Gdx.graphics.getScreenHeight())。此外,您必须设置投影矩阵,就像 Lucien 在他的回答中写的那样。 -
我必须添加这两行加上这些:
cam.position.set(cam.viewportWidth / 2f, cam.viewportHeight / 2f, 0)和cam.update()。现在它似乎可以正常工作了
标签: java android libgdx sprite viewport