通過Android平臺移植魂鬥羅遊戲來闡述下jni的用法(把魂鬥羅遊戲嵌入到FC遊戲模擬器裏,省去了SD卡加載ROM)

出發點: 傳統的遊戲模擬器(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方法一次性註冊。

 

運行結果:

 

 

下載:魂鬥羅

 

發佈了48 篇原創文章 · 獲贊 5 · 訪問量 56萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章