症状
Textの透明度をsetAlpha()で指定しても、「完全に透明」か「完全に不透明」にしかなりませんでした。setAlpha(0)で完全に透明になり、それ以外の値では、値にかかわらず完全に不透明になってしまいます。「半透明にできない」とも言えますね。図はInkscapeで作成したイメージです。
![]() |
Textが半透明にできない! |
原因
原因は「TextureAtlas生成時のTextureOption」でした。TextureAtlasは読み込んだフォントを格納するオブジェクトです。読み込んだ画像もTextureAtlasに格納されるので、場合によってはSpriteでも上の症状が起こるという事です。this.mFont = FontFactory.create(activity.getFontManager(),
activity.getTextureManager(), 256, 256,
TextureOptions.BILINEAR_PREMULTIPLYALPHA,
Typeface.create(Typeface.DEFAULT, Typeface.BOLD),
48,android.graphics.Color.WHITE);
this.mFont.load();
上が問題が発生する場合のフォント読み込み部分のコードです。TextureOptionに「TextureOptions.BILINEAR_PREMULTIPLYALPHA」という定数を与えています。
これは 「TextureOptions.BILINEAR」に比べて拡大縮小が綺麗になる特長があります。
ですが、この状態で作られたText(もしくはSprite)はデフォルトでは問題の症状のように半透明にできない問題が発生します。
解決方法
2つ方法があります。以下のうちどちらかを行えば良いです。1. 「TextureOptions.BILINEAR」を指定する。
簡単です。このオプションにするとsetAlpha()がちゃんと動きます。ですが、拡大縮小が少し荒くなります。
2. TextやSpriteにBlendFunctionを設定する。
BILINEAR_PREMULTIPLYALPHAの画質を保って半透明に出来ます。コードは以下のような感じ。
Text text = new Text(x, y, mFont,
"Text", vertexBufferObjectManager);
text.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
setBlendFunctionで設定します。多少おまじない感はありますがこれで半透明に出来ます。
0 件のコメント:
コメントを投稿