歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

利用Android游戲引擎Angle開發界面——顯示漢字

Angle不支持漢字的顯示,內帶的AngleFont,對E文的支持是沒問題。AngleFont通過把字符變為Bitmap的方式來加載字庫,准備紋理。對於漢字字庫,這個過程會耗時很長,全部加載進來,占用內存也很多;如果部分加載、根據使用頻度更新字庫緩存,算法又太麻煩。
 
我使用的是笨方法,先使用Android的Canvas,把漢字繪制到內存圖片,然後根據圖片生成一個AngleSprite(含配套的AngleSpriteLayout及AngleSpriteLayout關聯的Texture)。下面是轉換漢字為Bitmap的類,支持單行文本繪制,可以根據需要做省略處理。

public final class StringToBitmap {

 public static Bitmap getBitmapFromSingleLineString(String text, int textColor, int backgroundColor, String fontType,
   int fontSize, int bitmapWidth, int bitmapHeight, Paint.Align align) {
  Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight,
    Bitmap.Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  // 背景顏色
  canvas.drawColor(backgroundColor);
  TextPaint paint = new TextPaint();

  Typeface typeface = Typeface.create(fontType, Typeface.NORMAL);
  // 消除鋸齒
  paint.setAntiAlias(true);
  // 字體為紅色
  paint.setColor(textColor);
  paint.setTypeface(typeface);
  paint.setTextSize(fontSize);
  paint.setTextAlign(align);
 
  CharSequence truncateText = TextUtils.ellipsize(text, paint
    , bitmapWidth, TextUtils.TruncateAt.END);
  // 繪制字體
  canvas.drawText(truncateText, 0, truncateText.length(), 0, bitmapHeight - 1,  paint);
  return bitmap;
 }
}

僅僅是上面的處理還不夠,生成了一個Bitmap,還需要轉變成紋理。

Angle類庫中的AngleTextureEngine只能從Resouce中加載紋理。第一步,我修改了AngleTextureEngine類,添加了下面的方法以便從已有的Bitmap生成紋理對象。

 public AngleTexture createTextureFromBitmap(Bitmap bitmap)
 {
  AngleTexture tex = null;
  Iterator<AngleTexture> it = mTexturesX.iterator();
  while (it.hasNext())
  {
   tex = it.next();
   if (tex instanceof AngleBitmapTexture)
   {
    // Texture already exists
    if (((AngleBitmapTexture) tex).mBitmap == bitmap)
    {
     tex.mRefernces++;
     return tex;
    }
   }
  }

  tex = new AngleBitmapTexture(this, bitmap);
  mTexturesX.add(tex);
  return tex;
 }

Copyright © Linux教程網 All Rights Reserved