抱歉,我无法清楚地描述我的问题。我重新描述它:
只有一个游戏视图由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等于手机屏幕的宽度和高度,因此游戏视图会填满整个手机屏幕。
Screen
的子类实现。我认为完成的游戏应该如下图所示:
按钮栏添加到手机屏幕的底部。当我单击4个按钮中的一个时,游戏视图已切换,但按钮栏未切换。例如,如果玩家点击“排名”按钮,游戏将视图设置为排名视图(由排名屏幕实施),该视图显示玩家的分数,并且按钮仍然可见:
我可以想到两种方法来保持按钮栏可见:
将按钮栏和游戏视图组合到libgdx的屏幕中。我认为这是浪费,因为我需要在每个屏幕上绘制4个按钮,在4个屏幕中共有16个按钮。
将手机屏幕拆分为2个区域;游戏视图区和按钮栏区域。由libgdx的Screen实现的游戏视图区域,我可以通过setScreen方法切换游戏视图。问题是libgdx的屏幕似乎总是填满整个手机屏幕;我无法设置屏幕的宽度和高度。我尝试使用resize(int width, int height)
方法来缩小屏幕高度,为按钮栏留出空白,但它不起作用。
代码:
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);
}
}
任何建议都表示赞赏。
答案 0 :(得分:1)
所有libgdx事物都假定宽度和高度始终等于“窗口”大小。在台式机上,这可能比整个屏幕尺寸小,但它仍将填满整个渲染区域。在手机上,它很可能始终是手机的显示尺寸。
将它设置为较小的东西对你没有帮助,因为它不会只使用渲染区域的一部分。相反,你会得到奇怪的结果。
请勿更改从resize方法获得的值。而是使用您的第一个解决方案,并在游戏屏幕的底部渲染按钮。
您无需在此处复制任何代码。实现类似“ButtonBarGUI”的东西,它使用Stage和scene2d.ui的东西来渲染屏幕底部的四个按钮,然后只重复使用这个助手类通过Stage.draw()在任何屏幕上渲染按钮栏。 / p>