midp移植到doja過程中的按鍵對映方法

2021-04-07 06:32:56 字數 2359 閱讀 4282

寫文章對我來說真是件痛苦的事,從小學到高中,語文成績能夠及格一直都是個奢侈的夢想, 沒辦法,還是忍不住要寫出來,權當補補語文吧!下面就講講我在移植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 無關性 問題,即執行位址和載入位址的區別...