3

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

  1. 我正在用 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();
}

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

  1. 现在我继续开发我的游戏。我想在我的游戏中有 4 个游戏视图。每个游戏视图都由Screenlibgdx 中的一个子类实现。我认为完成的游戏应该是这样的:

完成游戏

电话屏幕底部添加了一个按钮栏。当我单击 4 个按钮之一时,游戏视图切换了,但按钮栏没有切换。例如,如果玩家点击“Rank”按钮,游戏将视图设置为 Rank View(由 Rank 屏幕实现)显示玩家的分数,并且按钮仍然可见:

按下排名按钮后

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

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

    2. 将手机屏幕分成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);
}
}

任何建议表示赞赏。

4

1 回答 1

1

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

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

不要更改从 resize 方法获得的值。而是使用您的第一个解决方案并在游戏屏幕的底部呈现按钮。

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

于 2013-08-18T09:02:08.633 回答