如何在Libgdx中设置Screen的宽度和高度?

时间:2013-08-17 14:55:21

标签: android screen libgdx

抱歉,我无法清楚地描述我的问题。我重新描述它:

  1. 我正在用libgdx制作一款安卓游戏,现在我完成了一个演示:
  2. Demo

    只有一个游戏视图由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();
    }
    

    GAME_WIDTH,GAME_HEIGHT等于手机屏幕的宽度和高度,因此游戏视图会填满整个手机屏幕。

    1. 现在我继续开发我的游戏。我想在我的游戏中有4个游戏视图。每个游戏视图由libgdx中的Screen的子类实现。我认为完成的游戏应该如下图所示:
    2. Completed game

      按钮栏添加到手机屏幕的底部。当我单击4个按钮中的一个时,游戏视图已切换,但按钮栏未切换。例如,如果玩家点击“排名”按钮,游戏将视图设置为排名视图(由排名屏幕实施),该视图显示玩家的分数,并且按钮仍然可见:

      After pressing rank button

      1. 我可以想到两种方法来保持按钮栏可见:

        1. 将按钮栏和游戏视图组合到libgdx的屏幕中。我认为这是浪费,因为我需要在每个屏幕上绘制4个按钮,在4个屏幕中共有16个按钮。

        2. 将手机屏幕拆分为2个区域;游戏视图区和按钮栏区域。由libgdx的Screen实现的游戏视图区域,我可以通过setScreen方法切换游戏视图。问题是libgdx的屏幕似乎总是填满整个手机屏幕;我无法设置屏幕的宽度和高度。我尝试使用resize(int width, int height)方法来缩小屏幕高度,为按钮栏留出空白,但它不起作用。

      2. 代码:

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

        任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

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

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

请勿更改从resize方法获得的值。而是使用您的第一个解决方案,并在游戏屏幕的底部渲染按钮。

您无需在此处复制任何代码。实现类似“ButtonBarGUI”的东西,它使用Stage和scene2d.ui的东西来渲染屏幕底部的四个按钮,然后只重复使用这个助手类通过Stage.draw()在任何屏幕上渲染按钮栏。 / p>