話說閑來沒事玩Android的遊戲吧。發現了一個問題。
在 Google 的 android-sdk-windows-1.0_r2 的sample中,有一個 LunarLander 例子。一個挺好玩的遊戲,很難。但是發現一個問題就是沒有介紹如何玩這個遊戲。一直不知道怎麼控制著陸。看了代碼才知道 按住 S 是 點火firing(靠,這年月忌談fire!)。這才能玩這個遊戲。
所以產生了一個想法,在這個例子程式中添加一個Help的菜單彈出這個按鍵協助。這也算是第一次接觸Java和Eclipse的學習和實踐吧。
1. 和VC 一樣,先要建立一個Help的menu資源和字串。
在 LunarLander.java 的 onCreateOptionsMenu(Menu menu)中添加一行。
public boolean onCreateOptionsMenu(Menu menu) {<br /> super.onCreateOptionsMenu(menu);</p><p> menu.add(0, MENU_START, 0, R.string.menu_start);<br /> menu.add(0, MENU_STOP, 0, R.string.menu_stop);<br /> menu.add(0, MENU_PAUSE, 0, R.string.menu_pause);<br /> menu.add(0, MENU_RESUME, 0, R.string.menu_resume);<br /> menu.add(0, MENU_EASY, 0, R.string.menu_easy);<br /> menu.add(0, MENU_MEDIUM, 0, R.string.menu_medium);<br /> menu.add(0, MENU_HARD, 0, R.string.menu_hard);<br /> menu.add(0, MENU_HELP, 0, R.string.menu_help); // added the HELP button</p><p> return true;<br /> }
2. 雙擊Eclipse->Package Explorer->LunarLander項目的res->values檔案夾底下的 string.xml 中添加
"Add..."添加一個字串用來顯示菜單內容。
Name: menu_help
Value: Help.
另外需要添加一個字串顯示協助內容。
Name: message_help_content
value: "Left Arraw Key: counter-clock rotate/nRight Arraw Key: clock rotate/nUp Arraw Key: Start/Stop/nBlank Key: firing/nS Key: restart"
3. 在LunarLander.java的 onOptionsItemSelected 函數中添加 switch 分支
public boolean onOptionsItemSelected(MenuItem item) {<br /> switch (item.getItemId()) {<br /> case MENU_START:<br /> mLunarThread.doStart();<br /> return true;<br /> case MENU_STOP:<br /> mLunarThread.setState(LunarThread.STATE_LOSE,<br /> getText(R.string.message_stopped));<br /> return true;<br /> case MENU_PAUSE:<br /> mLunarThread.pause();<br /> return true;<br /> case MENU_RESUME:<br /> mLunarThread.unpause();<br /> return true;<br /> case MENU_EASY:<br /> mLunarThread.setDifficulty(LunarThread.DIFFICULTY_EASY);<br /> return true;<br /> case MENU_MEDIUM:<br /> mLunarThread.setDifficulty(LunarThread.DIFFICULTY_MEDIUM);<br /> return true;<br /> case MENU_HARD:<br /> mLunarThread.setDifficulty(LunarThread.DIFFICULTY_HARD);<br /> return true;<br /> case MENU_HELP: // added the HELP button<br /> help();<br /> return true;<br /> }</p><p> return false;<br /> }
4. 在LunarLander.java 中添加Help函數的實現:
public void help() {<br /> new android.app.AlertDialog.Builder(this)<br /> .setTitle("Help")<br /> .setMessage(R.string.message_help_content)<br /> .setIcon(R.drawable.app_lunar_lander)<br /> .setNegativeButton("OK",<br /> new DialogInterface.OnClickListener() {<br /> public void onClick(DialogInterface dialog, int whichButton) {<br /> // 對話方塊開著,然後按 Home,之後在程式中再次啟動LunarLander時,程式會報錯。<br /> // 解決方案,將 Builder(LunarLander.this)改為Builder(this)<br /> }<br /> })<br /> .show();<br /> }
這麼NB的代碼,不是自己寫的是google出來改的。
nnd,在VC下的一個簡單的MessageBox訊息框,這邊居然這麼複雜。
用到了集合的概念(以前用Javascript的使用學過這個概念)。
5. 接下來可以進行測試了。選中項目,點Run。在模擬器上運行起來了。
模擬器上點 Menu-> More->Help。出來協助了。
6. 小插曲,再仔細測測,你會發現一個bug,就是help對話方塊保持的狀態下,按Home鍵回到主屏,然後再次進入LunarLander程式時候,系統會報錯。
"Sorry! The application Lunar Lander(process com.example.android.lunarlander) has stopped unexpectedly.Please try again. Force close"如:
7. 如何修改呢?誰知道告訴我一聲。