溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

android游戲開發(fā)筆記(1)——畫圖及輸入響應(yīng)(一只被玩弄的老鼠)

發(fā)布時間:2020-06-24 11:28:27 來源:網(wǎng)絡(luò) 閱讀:734 作者:琴之弦 欄目:開發(fā)技術(shù)

 

琴弦jerry的博客主站地址:http://www.jerry-zhang.com

瀏覽更多技術(shù)博客,請移步至:http://www.jerry-zhang.com

     本著實(shí)踐和動手第一的原則,我稍稍看了一些資料和簡單的開發(fā)代碼之后,對游戲開發(fā)有了一個初步的認(rèn)識。迫不及待想要弄一個小東西。一定要讓個什么東西在即的手中動起來。一開始我是想到了之前我都手機(jī)上的那個直升飛機(jī)游戲。飛機(jī)一直下落,按下一個鍵飛機(jī)就飛高。一高一低的躲避前面的障礙物。 不過自己不知道什么原因就想到了一只逃跑的老鼠被人用繩子綁住了尾巴。(看,人們總是這么殘忍。)

     上一篇文章本來就想寫這個demo。結(jié)果前面開篇扯了一些游戲的相關(guān)知識,沒想到就一大篇了,所以上一篇單獨(dú)一篇作為預(yù)備知識(覺的自己很無恥)。

     下看看丑陋的最后界面效果圖。期望不要太高,本篇只是簡單的畫圖、按鍵觸摸屏的輸入響應(yīng)。只是簡單的可以動。

 

android游戲開發(fā)筆記(1)——畫圖及輸入響應(yīng)(一只被玩弄的老鼠)

 

 

    嘿嘿,一直悲慘的老鼠,圖片資源來自google圖片搜索。


這個project 結(jié)構(gòu)介紹。


     其實(shí)就是比基本的helloword多了一個自己定義的DrawView該類繼承自View,主要用來顯示圖畫。一個Activity類 主要用來接收按鍵和觸屏事件。然后放只老鼠在drawable里面,這里我氣的名字叫mouse ,以后我們就可以用R.drawable.mouse 召喚老鼠。

     就這么兩個java文件。讓我先來唧唧歪歪一大段,然后放出大家,如果你覺得羅嗦直接忽略漢字看代碼。

     先看GameTestActivity (就是該project中唯一的Activity)
     

     直接在Oncrate方法里面設(shè)置主view 為我們自定義DrawView。

     重寫onKeyUp,onKeyDown 方法來接收按鍵事件,然后處理。(你的手機(jī)或者模擬器上需要有按鍵哦—— 廢話么 ~)

     重寫onTouchEvent方法用來接收觸屏事件,然后處理。(親,你的手機(jī)或者模擬器要有屏幕,并且可以觸摸或點(diǎn)擊哦。——找打?。?/span>

     然后看我們的DrawView,用來顯示動畫,負(fù)責(zé)繪制和刷新畫面。


     寫構(gòu)造器,構(gòu)造器里面主要是初始化 畫筆 及老鼠的初始坐標(biāo)。

     重寫onDraw方法 ,該方法在構(gòu)造器后執(zhí)行,用來繪制該view的界面,調(diào)用invalidate 可以再次調(diào)用該方法,重新繪制view界面。

     自己寫個讓老鼠向左向右移動的方法 moveLeft 和moveRight 。


  1. void moveLeft() {  
  2. x--;  
  3. invalidate();  
  4. }  
  5.  
  6. void moveRight() {  
  7. x+=3;//為了讓向右跑的時候可以更快些 幅度設(shè)置為3.  
  8. invalidate();  

     然后需要讓這個老鼠自動往左跑。我們添加一個handler 和 timer 以及 timertast ,用來不斷更新圖像。
     注意,這里不是讓圖像自動更新最好的辦法,有待更好的方法。

 


代碼



廢話說完了 上代碼。更消息的請大家看注釋。在代碼中注釋起來還是比較清楚一些。


GameTestActivity.java


  1. package com.qxjerry.game;  

  2.  

  3. import android.app.Activity;  

  4. import android.os.Bundle;  

  5. import android.view.KeyEvent;  

  6. import android.view.MotionEvent;  

  7.  

  8. public class GameTestActivity extends Activity {  

  9. DrawView mDrawView;//定義成變量 后面我們利用這個對象引用調(diào)用讓老鼠移動的方法。  

  10.  

  11. @Override  

  12. public void onCreate(Bundle savedInstanceState) {  

  13. super.onCreate(savedInstanceState);  

  14. mDrawView = new DrawView(this);  

  15. setContentView(mDrawView);//設(shè)置主view  

  16. }  

  17.  

  18. private void pullMouse(boolean pull){  

  19. mDrawView.setPulling(pull);// 將 pull的標(biāo)識位 表示為 true or false 。  

  20. if(pull){  

  21. mDrawView.moveRight();//向右拉老鼠,老鼠向右移動  

  22. }  

  23.  

  24. }  

  25. @Override  

  26. public boolean onTouchEvent(MotionEvent event) {  

  27. switch (event.getAction()) {  

  28. case MotionEvent.ACTION_UP:  

  29. pullMouse(false);//false 表示放開了老鼠沒有拉了。  

  30. break;  

  31. case MotionEvent.ACTION_DOWN:  

  32. //這里和按鍵的效果不懂,觸屏需要不斷的觸碰屏幕。就是不斷的離開屏幕,觸摸屏幕。而按鍵的down不同  

  33. pullMouse(true);//true 為正在向右拉。  

  34. break;  

  35. default:  

  36. break;  

  37. }  

  38. return true;  

  39. }  

  40.  

  41. @Override  

  42. public boolean onKeyUp(int keyCode, KeyEvent event) {  

  43. switch (keyCode) {  

  44. //按鍵放開的時候,放開的瞬間  

  45. case KeyEvent.KEYCODE_SEARCH:  

  46. pullMouse(false);  

  47. break;  

  48. default:  

  49. break;  

  50. }  

  51. return true;  

  52. }  

  53.  

  54. @Override  

  55. public boolean onKeyDown(int keyCode, KeyEvent event) {  

  56. switch (keyCode) {  

  57. //和觸屏不同,一直按著也可以觸發(fā)事件  

  58. case KeyEvent.KEYCODE_SEARCH:  

  59. pullMouse(true);  

  60. break;  

  61.  

  62. default:  

  63. break;  

  64. }  

  65. return true;//返回true 按鍵事情不再傳遞,事件在該方法中消化。  

  66. }  


DrawView.java

  1. DrawView.java代碼請查看這里 
  1. 鏈接:http://www.jerry-zhang.com/index.php/2011/09/28/android-game-dev-1-ondraw-ontouch-onkey-a-mouse/ 


解釋說明


簡單解釋一下代碼中涉及到的一些方法。

 

Timer的schedule方法介紹


mTimer.schedule(mTimerTask, 5, 50);
該方法第一個參數(shù)是一個線程,就是要不斷執(zhí)行的任務(wù)描述。這里我們是不斷的發(fā)送讓老鼠向左移動的命令。
第二個參數(shù) 是第一次執(zhí)行該方法間隔的毫秒數(shù)
第三個參數(shù) 是后面執(zhí)行該方法時 需要間隔的時間 毫秒單位


一個砍人的現(xiàn)場


你會感覺到 handler像一個劊子手,隨時等候各種不動的命令。而timertast 想一個小領(lǐng)導(dǎo),或者一個發(fā)命令的機(jī)器。
而timer的schedule 就像是總指揮。
這個時候你就感覺是總指揮給小領(lǐng)導(dǎo)說你每過2分鐘給劊子手發(fā)個命令。
而小領(lǐng)導(dǎo)就美國2分鐘發(fā)個命令給劊子手, 每過2分鐘給劊子手是 “砍!” 。
而劊子手聽到 “砍!” 就直接砍了。
到這里應(yīng)該比較清楚的說明了這只可憐的丑陋的老鼠是如何被我們玩弄的了。大家可以玩弄自己想玩弄的東西。不要太暴力哦。

 


    剛剛開始學(xué)習(xí)游戲開發(fā),文章總有不準(zhǔn)確或者錯誤之處,還請各位一定指出。

    至于本文中的整體項(xiàng)目代碼我計(jì)劃隨著文章的更新,將會有一個比較完善一個的版本,那個時候統(tǒng)一上傳,提供大家下載。
不過如果有朋友需要該文章中代碼也可以直接聯(lián)系我索取。

琴弦jerry的博客主站地址:http://www.jerry-zhang.com

瀏覽更多技術(shù)博客,請移步至:http://www.jerry-zhang.com

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI