5

LibgdxScene2dUIボタンの背景としてNinePatch使用しようとしています。読み込んでいますが、本当に醜いです。「メタデータ」ピクセルが表示され、通常の画像のように引き伸ばされています(ボタンのテキストは「続行」です)。

9パッチボタンの醜い画像

次のように(libgdx)を介して.9.pngファイルを(libgdx)に直接ロードしています:NinePatchDrawableNinePatch

this.dialogButtonUp = new NinePatchDrawable(
   new NinePatch(new Texture(Gdx.files.internal("data/button-round.9.png"))));
this.dialogButtonDown  = new NinePatchDrawable(
   new NinePatch(new Texture(Gdx.files.internal("data/button-round-down.9.png"))));

次にTextButtonStyle、ボタンを説明し、2つのNinePatchドローアブルを参照するを作成します。

TextButton.TextButtonStyle buttonStyle = new TextButton.TextButtonStyle();
buttonStyle.font =  aValidFontReally;
buttonStyle.fontColor = Color.BLACK;
buttonStyle.up = this.dialogButtonUp;
buttonStyle.down = this.dialogButtonDown;
buttonStyle.pressedOffsetX = -2;

私はDialogボックスを介して間接的にボタンを作成しています:

new Dialog( ... ).button("Continue", null, buttonStyle);

.9.pngファイルをチェックして、次のことを確認しました。

  • アセットファイルがEclipseで更新されたこと
  • メタデータの境界ピクセルが完全に非表示または完全に表示-黒のいずれかであること
  • Androiddraw9patchツールが画像を読み込んで確認できること

何をチェックまたは変更するかについての他の提案はありますか?

4

1 に答える 1

11

@RodHydeからのいくつかのポインターのおかげで、libgdxNinePatchクラスは「後処理された」9パッチテクスチャを受け入れるように設計されているように見えます(つまり、単一のテクスチャをパッチにカットする方法を説明する個別の整数値を使用)。この「処理」は通常、「。9.png」ファイルをにパックすることの副作用として発生しますTextureAtlashttps://github.com/libgdx/libgdx/wiki/Texture-packer#ninePatchesを参照)。テクスチャアトラスは非常に優れたアイデアです(特に、UIにさまざまなテクスチャ要素が多数含まれている場合)。これは理にかなっていますが、何かを開発して実行しようとする場合は少し意外です。

これを回避して、「。9.png」ファイルを直接含めることができるようにするには、次のように記述します。

private static NinePatch processNinePatchFile(String fname) {
    final Texture t = new Texture(Gdx.files.internal(fname));
    final int width = t.getWidth() - 2;
    final int height = t.getHeight() - 2;
    return new NinePatch(new TextureRegion(t, 1, 1, width, height), 3, 3, 3, 3);
}

これにより、テクスチャが読み込まれ、1ピクセルのメタデータ境界線をトリミングするサブ領域が作成され、9パッチの境界線要素の幅/高さが3ピクセルであると推測されます。(テクスチャデータをいじって正しく計算することは可能のようですが、努力する価値はありません。その場合は、テクスチャをアトラスに配置するだけです。)

于 2013-03-12T21:14:52.810 に答える