寫文章對我來說真是件痛苦的事,從小學到高中,語文成績能夠及格一直都是個奢侈的夢想, 沒辦法,還是忍不住要寫出來,權當補補語文吧!下面就講講我在移植midp遊戲到doja過程中是如何進行按鍵對映的,希望對大家有幫助。
不論是midp手機還是doja手機,鍵盤上的按鍵都是差不多的,基於這個實事,我們只需要把doja中的鍵值修改為相應的midp鍵值即可。
midp中跟按鍵相關的常用函式包括:keypressed(),keyreleased(),getgameaction(),一般很少用keyrepeated(), getkeycode() ,getkeyname() 和觸控筆函式,在這裡就不討論了。而doja中的函式只討論processevent(), 移植過程中很少涉及getkeypadstate()函式,也不討論。所以我們要做的就是如何把processevent()函式還原成midp中的函式,具體做法如下:
step 1、反編譯midp中的canvas.class,拷貝其鍵值常量:
為什麼我們要拷貝這些常量呢?因為在實際情況中,我們拿到的midp**千奇百怪,很多**直接在邏輯中使用數字來判斷按鍵情況,這讓**閱讀起來很不放便,就跟別說修改了,雖然最終都能根據**推導出來,但卻白白的浪費了時間,也就直截了當的浪費了生命。下面是常用的鍵值:
public static final int up = 1;
public static final int down = 6;
public static final int left = 2;
public static final int right = 5;
public static final int fire = 8;
public static final int game_a = 9;
public static final int game_b = 10;
public static final int game_c = 11;
public static final int game_d = 12;
public static final int key_num0 = 48;
public static final int key_num1 = 49;
public static final int key_num2 = 50;
public static final int key_num3 = 51;
public static final int key_num4 = 52;
public static final int key_num5 = 53;
public static final int key_num6 = 54;
public static final int key_num7 = 55;
public static final int key_num8 = 56;
public static final int key_num9 = 57;
public static final int key_star = 42;
public static final int key_pound = 35;
另外:左右鍵要根據具體的機型來確定,這裡以nokia為例:
public static final int key_softkey1 = -6;
public static final int key_softkey2 = -7;
step 1、實現getgameaction()函式:
midp遊戲中會經常使用這個函式,所以我們在doja**中實現它。
public static int getgameaction(int keycode)
return keycode;
}step 3、建立鍵值對映表:
這裡沒有全部對映,需要根據實際情況增加或減少對映內容,doja jar size被 限制在30k以內了,該省的就省吧,小日本就是扣。
public static final int doja2midp_keys =
, ,
, ,
, ,
, ,
, ,
, };
step 4、實現按鍵對映:
原理很簡單,我們只要在processevent()中轉換鍵值並分配給keypressed(), keyreleased()即可。
**如下:
public void processevent(int type, int c)
}c = tempkey;
//分配按鍵
if (type == display.key_pressed_event ) else
}總結:這樣我們就可以在不修改原來任何函式的條件下把midp**中關於按鍵部分移植到doja中去。
Linux移植過程中的一些錯誤
問題點 1 yaffs2根檔案系統無法掛載 failed to execute linuxrc.attempting defaults.kernel panic not syncing no init found.try passing init option to kernel.原因 mkyaff...
U Boot移植過程中的執行位址和裝載位址的區別
連線指令碼檔案lds中沒有設定lma,只是設定了vma。vma的設定是通過頂層目錄下的config.mk檔案中的ldflags實現的 在board smdk2410 config.mk定義了text base 0x33f80000 sdram 即程式的執行位址 檢視u boot.map檔案,的連線位...
uboot移植過程中的執行位址和裝載位址的區別
uboot移植涉及到底層硬體的設定,因此需要掌握uart 系統時鐘頻率 nor flash nand flash sdram 網絡卡 儲存控制器等硬體的功能及配置,這些都可以參照相應開發板的晶元手冊來完成,沒有什麼大的問題。在移植過程中,一直困擾我的是pic 無關性 問題,即執行位址和載入位址的區別...