Android 如何在Libgdx中设置屏幕的宽度和高度?

Android 如何在Libgdx中设置屏幕的宽度和高度?,android,screen,libgdx,Android,Screen,Libgdx,对不起,我不能清楚地描述我的问题。我重新描述它: 我正在用libgdx制作一个android游戏,现在我完成了一个演示: 它只有一个游戏视图,由GameScreen类实现,GameScreen类是libgdx中Screen的一个子类: public class LaohuGame extends Game { public static final int FRUIT_NUM = 24; public static final String WORK_DIR = "Desktop/asset

对不起,我不能清楚地描述我的问题。我重新描述它:

  • 我正在用libgdx制作一个android游戏,现在我完成了一个演示:
  • 它只有一个游戏视图,由GameScreen类实现,GameScreen类是libgdx中Screen的一个子类:

    public class LaohuGame extends Game {
    
    public static final int FRUIT_NUM = 24;
    public static final String WORK_DIR = "Desktop/assets/";
    
    @Override
    public void create() {
        GameScreen gameScreen = new GameScreen(this);
        setScreen(gameScreen);
    
    }
    
    public class GameScreen extends LaohuScreen {
    
    private final Stage stage;
    public static int START_X = 11;
    public static int START_Y = 199;
    
    public GameScreen(Game game) {
        super(game);
        stage = new Stage(GAME_WIDTH,GAME_HEIGHT,true);
        //add actors to the stage
    }
    
    public class LaohuScreen implements Screen{
    
    int GAME_WIDTH;
    int GAME_HEIGHT;
    protected Game game;
    public LaohuScreen(Game game) {
        this.game = game;
        GAME_WIDTH = Gdx.graphics.getWidth();
        GAME_HEIGHT = Gdx.graphics.getHeight();
    }
    
    游戏宽度、游戏高度等于手机屏幕的宽度、高度,因此游戏视图会填满整个手机屏幕

  • 现在我继续发展我的游戏。我想在我的游戏中有4个游戏视图。每个游戏视图由libgdx中的
    Screen
    子类实现。我认为完成的游戏应该是这样的图片:
  • 手机屏幕底部添加了一个按钮栏。当我点击4个按钮中的一个时,游戏视图切换,但按钮栏没有切换。例如,如果玩家单击“排名”按钮,游戏将视图设置为排名视图(通过排名屏幕实现),显示玩家的得分,并且按钮仍然可见:

  • 我可以想出两种方法来保持按钮栏可见:

  • 将按钮栏和游戏视图合并到libgdx的屏幕中。我认为这是一种浪费,因为我需要在每个屏幕上画4个按钮,在4个屏幕上总共16个按钮

  • 将手机屏幕分为两个区域;游戏视图区域和按钮栏区域。游戏视图区域由libgdx的屏幕实现,我可以通过setScreen方法切换游戏视图。问题是libgdx的屏幕似乎总是占据整个手机屏幕;我无法设置屏幕的宽度和高度。我尝试使用
    resize(int-width,int-height)
    方法来降低屏幕的高度,为按钮栏留下空白,但不起作用

  • 代码:


    任何建议都将不胜感激。

    所有libgdx事物都假定宽度和高度始终等于“窗口”大小。在桌面计算机上,这可能小于整个屏幕大小,但仍将填充整个渲染区域。在手机上,它很可能始终是手机的显示大小

    将其设置为较小的值对您没有帮助,因为它不会仅使用渲染区域的一部分。相反,你会得到奇怪的拉伸结果

    不要更改从resize方法获得的值。取而代之的是使用第一个解决方案,渲染游戏屏幕底部的按钮


    这里不需要复制任何代码。实现类似于“ButtonBarGUI”的东西,它使用一个Stage和scene2d.ui东西在屏幕底部呈现四个按钮,然后只需重用这个助手类就可以通过Stage.draw()在任何屏幕上呈现按钮栏.

    嘿,如果你能与我们分享你尝试做的事情或你的成就,那将是非常好的。你可能想包括一些代码来展示你迄今为止的成就。您还应该指出代码中的哪一点被卡住了。我假设您使用的是Java,但如果不是,那么您应该说明这一点。您可能还需要解释一下“游戏视图”和“屏幕”的概念,并告诉我们您使用的是哪种开发环境。@Mark我重新编辑了我的帖子,您能再看一下吗?提前谢谢@我重新编辑了我的帖子,你能再看一次吗?提前谢谢!我不是Java方面的专家,但我认为您已经增加了获得答案的机会。没有照片;它们显示为文件路径。感谢您的回答!第一种解决方案是实现我的游戏的唯一方法吗?@user2692131我很确定这至少是一种方法。可能会有一些奇怪的黑客将屏幕渲染区域分成两部分,包括复制帧缓冲区等,但这会导致很多问题。我描述它的方式是有效的,其他人也这样做过。
    public class LaohuGame extends Game {
    
    public static final int FRUIT_NUM = 24;
    public static final String WORK_DIR = "Desktop/assets/";
    
    
    @Override
    public void create() {
        GameScreen gameScreen = new GameScreen(this);
        setScreen(gameScreen);
    
    }
    
    @Override
    public void setScreen(Screen screen) {
        super.setScreen(screen);
        this.getScreen().resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight() * 5 / 10);
    }
    
    @Override
    public void resize(int width, int height) {
        if (getScreen() != null) getScreen().resize(width, height * 5 / 10);
    }
    }