繁体   English   中英

Android的纵横比和视口:需要说明

[英]Aspect ratio and viewport with Android : Need an explication

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

我正在尝试制作适用于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() {}
}

请有人可以向我解释我应该怎么做或给我一些代码吗?

视口实际上就是您所需要的。 如果您希望每个设备都可以使用具有相同长宽比的图像,则可以使用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);

单击此链接以获取有关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();
}

希望对您有所帮助!

这正是视口的用途。

视口将处理不同的分辨率。 有关不同类型的视口以及它们之间的差异, 请参见视口Wiki

还有一些教程可以帮助您开始使用视口。 GameFromScratch有一个,但视口上还有更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM