Java Android的纵横比和视口:需要解释吗

Java Android的纵横比和视口:需要解释吗,java,android,libgdx,Java,Android,Libgdx,首先,我知道这个主题已经有很多话题了,但我还是什么都不懂 我试图让Android游戏可以在Play Store上下载,但我有一个问题每次都会让我停下来,我怎么能让游戏可以在所有手机上以相同的纵横比玩 例如: 我想做一个游戏,其中一些物体从屏幕顶部随机落在玩家的角色上 如何在每部手机上打印背景图像、播放器图像和落物图像,使其成为相同的外观 首先,我想打印圆形图像 以下是我目前拥有的: public class MyAwesomeGame extends Game { public Spri

首先,我知道这个主题已经有很多话题了,但我还是什么都不懂

我试图让Android游戏可以在Play Store上下载,但我有一个问题每次都会让我停下来,我怎么能让游戏可以在所有手机上以相同的纵横比玩

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

如何在每部手机上打印背景图像、播放器图像和落物图像,使其成为相同的外观

首先,我想打印圆形图像 以下是我目前拥有的:

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();
    }
}
以及:


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

这正是视口的用途

视口将处理不同的分辨率。用于不同类型的视口以及它们之间的差异

还有一些教程可以帮助您开始使用视口。 有一个,但在视口上也有很多。这实际上是您所需要的。如果您希望每个可以使用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);
单击此按钮可获取有关阶段的详细信息 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();
}

我希望这有帮助

关于GameFromScratch教程,我有两个问题:当他们使用新的FitViewPortcam时,100100;100美元是多少?这是照片的尺寸吗?它们是像素的吗?谢谢!是的,它帮了我很大的忙,现在我的游戏在我所有的设备上都运行得很好:D我最不需要的是学习如何创建个性化的按钮,以制作一个触动我的菜单,我将在上面完成我的第一个游戏Android@lan我认为这是个错误。设备的宽度和高度是由Gdx.graphics.getWidth和Gdx.graphics.getHeight计算的,而不是从image.getWidth和image.getHeight计算的。@Abhishek Aryan你说得对,我在使用平铺贴图时一定弄错了,因为你不能设置平铺贴图的大小来填充整个屏幕,我使用了“平铺贴图大小”来拉伸视口。不过,我可能错了。谢谢你的更正。我编辑了它
   @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();
}