3

申し訳ありませんが、私の問題を明確に説明することはできません。私はそれを再説明します:

  1. libgdx を使用して Android ゲームを作成していますが、今のところデモを完成させています。

デモ

libgdx の Screen のサブクラスである GameScreen クラスによって実装されるゲーム ビューは 1 つだけです。

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 つのボタンのいずれかをクリックすると、ゲーム ビューが切り替わりますが、ボタン バーは切り替わりません。たとえば、プレイヤーが「ランク」ボタンをクリックすると、ゲームはプレイヤーのスコアを表示するランク ビュー (ランク画面で実装) にビューを設定し、ボタンは引き続き表示されます。

ランクボタン押下後

  1. ボタンバーを表示し続けるには、次の 2 つの方法が考えられます。

    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 メソッドから取得した値を変更しないでください。代わりに、最初のソリューションを使用して、ゲーム画面の下部にボタンをレンダリングします。

ここでコードを複製する必要はありません。Stage と scene2d.ui を使用して画面下部に 4 つのボタンをレンダリングする「ButtonBarGUI」のようなものを実装し、このヘルパー クラスを再利用して、Stage.draw() を介して任意の画面にボタン バーをレンダリングします。

于 2013-08-18T09:02:08.633 に答える