【初次接觸 Android】Google Sample LunarLander的一個問題

來源:互聯網
上載者:User

  話說閑來沒事玩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. 如何修改呢?誰知道告訴我一聲。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.