利用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; }
第二步,還要修改AngleSpriteLayout類來支援從Bitmap建立紋理,新增下面兩個方法(沒有指定cropWidth和cropHeight,只指定紋理尺寸width和height)。
public AngleSpriteLayout(AngleSurfaceView view, Bitmap bitmap) { doInit(view, 0, 0, bitmap); } public AngleSpriteLayout(AngleSurfaceView view, int width, int height, Bitmap bitmap) { doInit(view, width, height, bitmap); }
上面兩個方法呼叫的doInit函式,我參考AngleSpriteLayout類原有的doInit函式做了過載。
第三步,還得實現一個紋理類AngleBitmapTexture。程式碼如下:
public class AngleBitmapTexture extends AngleTexture {
protected Bitmap mBitmap;
public AngleBitmapTexture(AngleTextureEngine textureEngine, Bitmap bmp) {
super(textureEngine);
mBitmap = bmp;
}
@Override
public Bitmap create() {
return mBitmap;
}
void setBitmap(Bitmap bitmap){
mBitmap = bitmap;
mTextureEngine.releaseHWTexture(this);
}
}
好了,準備工作完成了,下面看怎麼使用。其實很簡單,舉個例子:
long t = System.currentTimeMillis();
AngleObject textHolder = mGLSurfaceView.addObject(new AngleObject());
int x = 120;
int y = 100;
for (int i = 0; i < 30; i++) {
if (i % 6 == 0) {
y += 60;
x = 120;
}
AngleSprite textSprite = new AngleSprite(x, y,
new AngleSpriteLayout(mGLSurfaceView, 190, 50,
StringToBitmap.getBitmapFromSingleLineString(
"渲染測試中" + i, 0xFFEEEEEE, 0x00000000, "宋體",
28, 190, 50, Paint.Align.LEFT)));
textHolder.addObject(textSprite);
x += 200;
}
Log.v("StringBitmap", "create 30 string bitmap, use: " + (System.currentTimeMillis() - t));
OK,到此為止,可以正常顯示漢字了,就是不知道效能如何。我在上面的程式碼中,加了些測試的程式碼,建立耗時還不算太多,在我的裝置上,建立30個字串文理,150毫秒左右。
似乎應該先分析一下Angle引擎的框架,不過程式碼和類都不太多,比較容易理清楚,閱讀程式碼花不了太多時間,等我有時間再補了。這也可能是這個引擎沒有文件的原因之一,作者認為程式碼可以說明大部分東西,不需要。
相關推薦
利用Android遊戲引擎Angle開發介面——顯示漢字
Angle不支援漢字的顯示,內帶的AngleFont,對E文的支援是沒問題。AngleFont通過把字元變為Bitmap的方式來載入字型檔,準備紋理。對於漢字字型檔,這個過程會耗時很長,全部載入進來,佔用記憶體也很多;如果部分載入、根據使用頻度更新字型檔快取,演算法又太麻煩
國外15種手機遊戲引擎和開發工具介紹
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android遊戲引擎Rokon宣佈停止更新
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
為什麼沒有好用的Android遊戲引擎
隨著Android平臺的不斷髮展,近期Android開發者數量呈現出上升勢頭,就連以往較為冷門的遊戲開發領域也湧現出不少生力軍。然而,全新的問題正擺在了初學者面前,很多他們從未遇過的問題開始浮上臺面。“找了好久也沒看見合適的引擎,看來Android真的不適合遊戲開發”、“我試過
記錄一下八款開源 Android 遊戲引擎
雖然android學了點點,然後現在又沒學了(我為啥這麼沒有恆心呢大哭)。以後有時間還是要繼續學android的,一定要啊!雖然現在沒學android遊戲程式設計,不過還是把這些八款開源的android遊戲引擎記錄一下,以後可能會用到也說不定。 1、Angle Angle是一款專為Android平臺設計的,敏
android遊戲引擎彙總
隨著Android系統的使用越來越廣泛,瞭解一下Android平臺下的遊戲引擎就非常有必要。而同時因為基於Intel x86的移動裝置越來越多,我也非常關注支援x86的移動遊戲引擎。然而就目前為止遊戲引擎的數量已經非常之多,每個引擎都有不同的特徵、價格、成熟度等。通過一些調
利用android studio實現手機資訊介面
1. 設計思路(實現原理) 1)將準備好的八個圖示複製到res/drawable資料夾下 2)建立一個垂直的線性佈局,並在線性佈局中建立4個相對佈局 3)在相對佈局中新增相應的TextView 4)在values檔案下的style.xml檔案中存放抽取出來的樣式
android遊戲引擎andengine學習系列三:繪製遊戲虛擬搖桿
如何高效的學習,這才是我們最值得去學習的。 andengine中繪製虛擬遊戲搖桿非常簡單,只需要實現AnalogOnScreenControl模擬搖桿類,在設定一些屬性即可。先看效果圖: 左邊的搖桿是控制精靈上下左右移動,右邊的搖桿空值精靈的旋轉。程式碼結構跟and
android——TextView預設文字開發時顯示執行時隱藏
有沒有一種方法可以讓預設文字只在android studio 編輯時顯示,而在真機執行時不顯示,避免載入資料時的不友好展示呢? 根佈局新增屬性: xmlns:tools="http://schemas.android.com/tools" textview新增屬性:
Android 百度地圖開發(一)如何呼叫百度地圖介面和在專案中顯示百度地圖以及實現定位
二、下載百度地圖API庫 然後新增到專案中即可。 三、在專案清單AndroidMainifest.xml配置百度地圖API key和新增相關許可權 四、在專案呼叫百度地圖專案功能,這篇文章就首先講講顯示地圖和定位的功能 首先
利用遊戲伺服器引擎Matchvs開發聯網微信小遊戲
Matchvs是一款十分易用的遊戲伺服器引擎,開發者通過SaaS層提供的API,即可完成“就近”節點接入、玩家匹配、遊戲資料通訊的建立;PaaS提供GS開發框架、託管平臺,無需自有伺服器資源即可對服務端的聯網能力進行擴充套件,實現自定義的服務端邏輯。 微信小遊戲玩法簡介:遊
【Android遊戲開發十六】Android Gesture之【觸控式螢幕手勢識別】操作!利用觸控式螢幕手勢實現一個簡單切換圖片的功能!
原創,轉載務必在明顯處註明:很多童鞋說我的程式碼執行後,點選home或者back後會程式異常,如果你也這樣遇到過,那麼你肯定沒有仔細讀完Himi的博文,第十九篇Himi專門寫了關於這些錯誤的原因和解決方法,這裡我在部落格都補充說明下,省的童鞋們總疑惑這一塊;請點選下面聯絡進入
為基於 x86 的 Android* 遊戲選擇合適的引擎
文章 開源 版本號 操作 ani android uic 摘要 方法 摘要 遊戲開發者知道 Android 中蘊藏著巨大的機遇。 在 Google Play 商店的前 100 款應用中,約一半是遊戲應用(在利潤最高的前 100 款應用中。它們所占的比例超過 90%)
[android] 百度地圖開發 (一).申請AK顯示地圖及解決顯示空白網格問題
定義 gps 官方 應用程序 2.x lns settings sap xmlns 近期做android百度地圖,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so顯示百度地圖時總是遇到問題——僅僅顯示
android應用開發 button顯示兩行文本
data oid out ron sdn weight drawable 做的 nor 自己寫了個電話撥號器的程序給男朋友玩,用來專門打我的手機號,為了把界面做的好看一點,須要用到顯示兩行文本的button。在網上搜羅了兩種方法,記錄在以下。跟大家一起分享一下,希望
如何學習aNDROID遊戲開發
.com and 遊戲開發 baidu ongl oid hao123 music andro %E5%AE%89%E5%8D%93%E7%9A%84%E5%B0%B1%E4%B8%9A%E6%96%B9%E5%90%91%E9%83%BD%E6%9C%89%E9%82%A
開發H5牛牛大廳遊戲引擎的選擇:Egret或Laya?
cti visual 回復 pre 開發經驗 中一 程序 進行 社區 Q1446595067官網:h5.haozibbs.com一、H5遊戲開發的引擎介紹 開發H5遊戲的引擎有很多,比如egret、laya、cocos-js等等。這裏主要是分析的是egret和laya,因為
【遊戲開發】免費開源遊戲引擎
開源即開放原始碼(Open Source),遊戲引擎好比賽車的引擎,是用於控制所有遊戲功能的主程式,從計算碰撞、物理加速系統和物體的相對位置,到接受玩家的輸入,以及按照正確的音量輸出聲音等等。無論是角色扮演遊戲、即時策略遊戲、冒險解謎遊戲或是動作射擊遊戲,哪怕是一個只有1兆的小遊戲,都有這樣一段起控
一個人獨立開發 3D 遊戲引擎可能嗎?
作者:孫志超 連結:https://www.zhihu.com/question/24733255/answer/42000966 來源:知乎 著作權歸作者所有,轉載請聯絡作者獲得授權。 當然可以,但難道有個引擎,就可以做出真正商業化的遊戲麼?
LGame-0 3 Android與JavaSE遊戲引擎 正式釋出,新增SRPG製作模組
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!