Как установить ширину и высоту экрана в Libgdx?

Извините, я не могу четко описать свою проблему. Я переописываю это:

  1. Делаю андроид игру с libgdx, а пока заканчиваю демку:

Демо

Он имеет только одно игровое представление, которое реализуется классом GameScreen, который является подклассом Screen в libgdx:

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 просмотра игры в своей игре. Каждое представление игры реализовано подклассом Screen в libgdx. Я думаю, что готовая игра должна выглядеть так:

Завершенная игра

Панель кнопок добавляется в нижнюю часть экрана телефона. Когда я нажимаю одну из 4 кнопок, вид игры переключается, но панель кнопок не переключается. Например, если игрок нажимает кнопку «Ранг», игра устанавливает режим просмотра «Рейтинг» (реализованный экраном «Ранг»), который показывает результаты игроков, а кнопки остаются видимыми:

После нажатия кнопки ранга

  1. Я могу придумать 2 способа сделать панель кнопок видимой:

    1. Объедините панель кнопок и представление игры в экран libgdx. Я думаю, что это пустая трата времени, потому что мне нужно нарисовать 4 кнопки на каждом экране, всего 16 кнопок на 4 экранах.

    2. Разделить экран телефона на 2 области; область просмотра игры и область панели кнопок. Область просмотра игры реализована с помощью экрана libgdx, и я могу переключать вид игры с помощью метода 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);
}
}

Любые предложения приветствуются.


person user2692131    schedule 17.08.2013    source источник
comment
эй, будет очень приятно, если ты поделишься с нами тем, что ты пытался сделать или где ты застрял   -  person Kumar Saurabh    schedule 17.08.2013
comment
Возможно, вы захотите включить некоторый код, чтобы показать, что у вас уже есть. Вы также должны указать, в какой точке этого кода вы застряли. Я предполагаю, что вы используете Java, но если нет, то вы должны это четко указать. Вероятно, вам также нужно объяснить вашу концепцию вида и экрана игры и, возможно, рассказать нам, какую среду разработки вы используете.   -  person Mark    schedule 17.08.2013
comment
@Mark, я отредактировал свой пост, не могли бы вы взглянуть на него еще раз? Заранее спасибо!   -  person user2692131    schedule 18.08.2013
comment
@ Кумар-Саураб, я отредактировал свой пост, не могли бы вы взглянуть на него еще раз? Заранее спасибо!   -  person user2692131    schedule 18.08.2013
comment
Я не эксперт в Java, но я думаю, что вы увеличили свои шансы получить ответ. Картинки недоступны; они отображаются как пути к файлам.   -  person Mark    schedule 18.08.2013
comment
Я новый пользователь stackoverflow. Моей репутации недостаточно, чтобы добавить ссылку или изображение в мой пост, поэтому вместо этого я добавляю URL-адрес изображения. URL-адрес изображения можно открыть в другой вкладке браузера. Приносим извинения за неудобства.   -  person user2692131    schedule 18.08.2013


Ответы (1)


Все вещи libgdx предполагают, что ширина и высота всегда равны размеру «окна». На настольном компьютере это может быть меньше, чем весь размер экрана, но все равно будет заполнять всю область рендеринга. На телефоне это, скорее всего, всегда будет размер дисплея телефона.

Установка его на что-то меньшее вам не поможет, потому что он не будет использовать только часть области рендеринга. Вместо этого вы получите странно растянутые результаты.

Не изменяйте значения, полученные методом изменения размера. Вместо этого используйте свое первое решение и визуализируйте кнопки в нижней части игровых экранов.

Здесь не нужно дублировать какой-либо код. Реализуйте что-то вроде «ButtonBarGUI», который использует Stage и материал scene2d.ui для рендеринга четырех кнопок в нижней части экрана, а затем просто повторно используйте этот вспомогательный класс для рендеринга панели кнопок на любом экране с помощью Stage.draw().

person noone    schedule 18.08.2013
comment
Спасибо за Ваш ответ! Является ли первое решение единственным способом реализовать мою игру? - person user2692131; 18.08.2013
comment
@user2692131 user2692131 Я почти уверен, что это, по крайней мере, правильный путь. Могут быть какие-то странные хаки, чтобы разделить область рендеринга вашего экрана на две части, включая копирование кадровых буферов и тому подобное, но это вызовет много проблем. То, как я описал это, является действительным, и это было сделано другими. - person noone; 19.08.2013