借助Android游戏引擎Angle开发界面——显示汉字
发布时间:2021-11-21 18:13:53 所属栏目:教程 来源:互联网
导读:Angle不支持汉字的显示,内带的AngleFont,对E文的支持是没问题。AngleFont通过把字符变为Bitmap的方式来加载字库,准备纹理。对于汉字字库,这个过程会耗时很长,全部加载进来,占用内存也很多;如果部分加载、根据使用频度更新字库缓存,算法又太麻烦。 我
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; } ![]() (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |