gpt4 book ai didi

java - Android 的宽高比和视口(viewport) : Need an explication

转载 作者:行者123 更新时间:2023-12-01 08:51:29 25 4
gpt4 key购买 nike

首先我知道这个主题已经有很多主题,但我仍然什么也不明白。

我正在尝试制作 Android 游戏(可在 Play 商店下载),但每次都会遇到一个问题,我怎样才能制作一款可以在所有具有相同宽高比的手机上玩的游戏?

例如:我想做一个游戏,其中一些物体从屏幕顶部随机落到玩家的角色上。

如何在每部手机上打印相同外观的背景图像、玩家图像和下落物体图像?

首先我想打印背景图像这是我目前拥有的:

public class MyAwesomeGame extends Game {
public SpriteBatch batch;

@Override
public void create () {
batch = new SpriteBatch();
setScreen(new MenuScreen(this));
}

@Override
public void render () {
super.render();
}

@Override
public void dispose () {
batch.dispose();
}
}

还有:

public class MenuScreen implements Screen {

private MyAwesomeGame game;

public MenuScreen(MyAwesomeGame game){
this.game = game;
}

@Override
public void show() {}

@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
game.batch.begin();
game.batch.end();
}

@Override
public void resize(int width, int height) {}

@Override
public void pause() {}

@Override
public void resume() {}

@Override
public void hide() {}

@Override
public void dispose() {}
}

请有人向我解释一下我应该做什么或给我一些代码吗?

最佳答案

viewport实际上就是你所需要的。如果您希望每个设备的图像具有相同的宽高比,您可以使用 StretchViewport 这将根据设备的宽高比自动缩小/放大图像,但会降低图像质量。

如果您不想破坏图像质量,请使用 FillViewport,它还可以保留虚拟屏幕尺寸的纵横比,但与 FitViewport 相比,它始终会填充整个屏幕,这可能会导致部分屏幕视口(viewport)被切断。

如果您希望背景图像占据整个屏幕,请执行以下操作:

int width =  Gdx.graphics.getWidth(); \\ get the width of the device
int height = Gdx.graphics.getHeight(); \\ get the height of the device

Texture backgroundImage = new Texture(pathName);
Image image = new Image(backgroundImage);
image.setSize(width,height); \\ background image will fill up your whole screen

Image player = new Image(new Texture(pathname)); \\ it's the same as what we did above

Stage stage = new Stage(new StretchViewport(width,height));
stage.addActor(player); \\ add your player and background image to stage
stage.addActor(image);

点击这个link有关舞台的更多信息StretchViewport 中的两个参数将根据设备的宽高比拉伸(stretch)宽度和高度。

现在在您的渲染方法上更新并渲染您的图像。

   @Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
}

希望对您有所帮助!

关于java - Android 的宽高比和视口(viewport) : Need an explication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com