ボタンの背景にNinePatchを使用して、シンプルなボタンを備えたメインメニューのステージを使用してテストしています。
これを設定するコードは次のようになります。
NinePatch テキストボタンのセットアップ
NinePatch btnNormal9 = NinePatchHelper.processNinePatchFile("data/button_normal.9.png");
NinePatchDrawable btnNormal9Drawable = new NinePatchDrawable(btnNormal9);
TextButtonStyle style = new TextButtonStyle(btnNormal9Drawable, btnNormal9Drawable, btnNormal9Drawable);
style.font = new BitmapFont();
style.fontColor = new Color(1, 1, 1, 1);
button = new TextButton("Start Game", style);
button.setSize(200, 100);
button.setPosition(0, 0);
stage.addActor(button);
次に、サイズ変更関数で、今のところこれを行っています。
コードのサイズ変更
@Override
public void resize(int width, int height) {
camera.viewportWidth = width;
camera.viewportHeight = height;
camera.update();
}
ウィンドウのサイズ (カメラ ビューポートのサイズ) に関係なく、ボタンは画面上の (0,0) に配置し、200 x 100 ピクセルにする必要があります。
NinePatch 画像 (「data/button_normal.9.png」) は 26x26 ピクセルです。しかし、このコードを使用して、4px 分割の 24x24 テクスチャにトリミングしました (ここから取得: Libgdx Scene2d ボタンの背景として 9 パッチの画像を読み込むとひどいように見えます):
ナインパッチの作成
public static NinePatch processNinePatchFile(String filename) {
final Texture t = new Texture(Gdx.files.internal(filename));
final int width = t.getWidth() - 2;
final int height = t.getHeight() - 2;
return new NinePatch(new TextureRegion(t, 1, 1, width, height), 4, 4, 4, 4);
}
以下のスクリーンショットのように、ウィンドウのサイズが640x400 ピクセル
などの偶数である限り、これは正常に機能します。
ただし、ウィンドウのサイズが639x401 ピクセルなどの奇数の場合、NinePatch は正しくスケーリングされません。
高さだけが奇数の場合、次のように NinePatch の垂直スケーリングでのみレンダリング エラーが発生します。
ボタンのサイズと位置がすべての場合で同じになるようにハードコードされているため、NinePatch はまったく同じように描画する必要があるため、なぜこれが起こっているのかわかりません。
誰かが助けを提供できるなら、私はそれを感謝します。
前もって感謝します。