首先,我知道该主题已经有很多主题,但是我还是一无所知。

我正在尝试制作适用于Android的游戏(可从Play商店下载),但我有一个单一的问题无法解决,我该如何制作可以在每部具有相同长宽比的手机上玩的游戏?

举个例子 :
我想制作一个游戏,其中某些物体从屏幕顶部随机掉落在玩家的角色上。

如何在每部手机上打印相同外观的背景图像,播放器图像和下落的物体图像?

首先我要打印bakcground图像
这是我目前拥有的:

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相比,它将始终充满整个屏幕,这可能会导致部分视口被剪切关。

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

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了解有关Stage的更多信息。
StretchViewport中的两个参数将根据设备的纵横比拉伸宽度和高度。

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

   @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();
}


希望对您有所帮助!

07-24 09:20