出發點: 傳統的遊戲模擬器(FC,neo,fba,gba,mame,n64,nds,psp)都陸陸續續移植到Android手機裏了,然後把遊戲ROM保存到SD卡里通過模擬器運行,但是考慮到手機遊戲要遵循快進快出的原則,所以我在此基礎上實現瞭如下幾點微創新
1. 直接把遊戲ROM放在Android的APK裏,點擊應用就開始遊戲,省去了通過文件瀏覽器查找遊戲的過程。
2. 通過插值算法把遊戲畫面放大到支持Android平板分辨率
3. 充分利用手機重力感應器的獨有特性(相對於其它兩塊屏,PC顯示器和電視),通過手機sensor作爲方向鍵
移植步驟:
1. 選擇開源的基於Linux的FC遊戲模擬器
2. 實現java訪問C層的JNI接口
3. Android的Acitvity Layout佈局時用RalativieLayout,將五項鍵和按鍵分別浮動在遊戲界面的兩端。
常用的JNI實戰經驗可以通過jni spec獲取,這裏要注意以下幾點:
1. 如果定義的是static native方法,在C/C++代碼裏不能用GetObjectClass獲取對象的類
2. 如果是Java和C/C++層需要共享內存,可以用GetDirectBufferAdress() API
3. jchar佔兩個字節(typedef unsigned short jchar;)
4. 全局引用記得釋放(NewGlobalRef,DeleteGlobalRef)
5 可以在jni裏(也就是在C/C++層)拋出Java需要捕獲的異常,如:
6. 最好是把native方法一次性註冊。
運行結果: