您好,登錄后才能下訂單哦!
琴弦jerry的博客主站地址:http://www.jerry-zhang.com
瀏覽更多技術博客,請移步至:http://www.jerry-zhang.com
本著實踐和動手第一的原則,我稍稍看了一些資料和簡單的開發代碼之后,對游戲開發有了一個初步的認識。迫不及待想要弄一個小東西。一定要讓個什么東西在即的手中動起來。一開始我是想到了之前我都手機上的那個直升飛機游戲。飛機一直下落,按下一個鍵飛機就飛高。一高一低的躲避前面的障礙物。 不過自己不知道什么原因就想到了一只逃跑的老鼠被人用繩子綁住了尾巴。(看,人們總是這么殘忍。)
上一篇文章本來就想寫這個demo。結果前面開篇扯了一些游戲的相關知識,沒想到就一大篇了,所以上一篇單獨一篇作為預備知識(覺的自己很無恥)。
下看看丑陋的最后界面效果圖。期望不要太高,本篇只是簡單的畫圖、按鍵觸摸屏的輸入響應。只是簡單的可以動。
嘿嘿,一直悲慘的老鼠,圖片資源來自google圖片搜索。
這個project 結構介紹。
其實就是比基本的helloword多了一個自己定義的DrawView該類繼承自View,主要用來顯示圖畫。一個Activity類 主要用來接收按鍵和觸屏事件。然后放只老鼠在drawable里面,這里我氣的名字叫mouse ,以后我們就可以用R.drawable.mouse 召喚老鼠。就這么兩個java文件。讓我先來唧唧歪歪一大段,然后放出大家,如果你覺得羅嗦直接忽略漢字看代碼。
先看GameTestActivity (就是該project中唯一的Activity)
直接在Oncrate方法里面設置主view 為我們自定義DrawView。
重寫onKeyUp,onKeyDown 方法來接收按鍵事件,然后處理。(你的手機或者模擬器上需要有按鍵哦—— 廢話么 ~)
重寫onTouchEvent方法用來接收觸屏事件,然后處理。(親,你的手機或者模擬器要有屏幕,并且可以觸摸或點擊哦。——找打!)
然后看我們的DrawView,用來顯示動畫,負責繪制和刷新畫面。
寫構造器,構造器里面主要是初始化 畫筆 及老鼠的初始坐標。重寫onDraw方法 ,該方法在構造器后執行,用來繪制該view的界面,調用invalidate 可以再次調用該方法,重新繪制view界面。
自己寫個讓老鼠向左向右移動的方法 moveLeft 和moveRight 。
- void moveLeft() {
- x--;
- invalidate();
- }
- void moveRight() {
- x+=3;//為了讓向右跑的時候可以更快些 幅度設置為3.
- invalidate();
- }
然后需要讓這個老鼠自動往左跑。我們添加一個handler 和 timer 以及 timertast ,用來不斷更新圖像。
注意,這里不是讓圖像自動更新最好的辦法,有待更好的方法。
代碼
廢話說完了 上代碼。更消息的請大家看注釋。在代碼中注釋起來還是比較清楚一些。
GameTestActivity.java
package com.qxjerry.game;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class GameTestActivity extends Activity {
DrawView mDrawView;//定義成變量 后面我們利用這個對象引用調用讓老鼠移動的方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDrawView = new DrawView(this);
setContentView(mDrawView);//設置主view
}
private void pullMouse(boolean pull){
mDrawView.setPulling(pull);// 將 pull的標識位 表示為 true or false 。
if(pull){
mDrawView.moveRight();//向右拉老鼠,老鼠向右移動
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
pullMouse(false);//false 表示放開了老鼠沒有拉了。
break;
case MotionEvent.ACTION_DOWN:
//這里和按鍵的效果不懂,觸屏需要不斷的觸碰屏幕。就是不斷的離開屏幕,觸摸屏幕。而按鍵的down不同
pullMouse(true);//true 為正在向右拉。
break;
default:
break;
}
return true;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
//按鍵放開的時候,放開的瞬間
case KeyEvent.KEYCODE_SEARCH:
pullMouse(false);
break;
default:
break;
}
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
//和觸屏不同,一直按著也可以觸發事件
case KeyEvent.KEYCODE_SEARCH:
pullMouse(true);
break;
default:
break;
}
return true;//返回true 按鍵事情不再傳遞,事件在該方法中消化。
}
}
DrawView.java
- DrawView.java代碼請查看這里
- 鏈接: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);
該方法第一個參數是一個線程,就是要不斷執行的任務描述。這里我們是不斷的發送讓老鼠向左移動的命令。
第二個參數 是第一次執行該方法間隔的毫秒數
第三個參數 是后面執行該方法時 需要間隔的時間 毫秒單位
一個砍人的現場
你會感覺到 handler像一個劊子手,隨時等候各種不動的命令。而timertast 想一個小領導,或者一個發命令的機器。
而timer的schedule 就像是總指揮。
這個時候你就感覺是總指揮給小領導說你每過2分鐘給劊子手發個命令。
而小領導就美國2分鐘發個命令給劊子手, 每過2分鐘給劊子手是 “砍!” 。
而劊子手聽到 “砍!” 就直接砍了。
到這里應該比較清楚的說明了這只可憐的丑陋的老鼠是如何被我們玩弄的了。大家可以玩弄自己想玩弄的東西。不要太暴力哦。
剛剛開始學習游戲開發,文章總有不準確或者錯誤之處,還請各位一定指出。至于本文中的整體項目代碼我計劃隨著文章的更新,將會有一個比較完善一個的版本,那個時候統一上傳,提供大家下載。
不過如果有朋友需要該文章中代碼也可以直接聯系我索取。
琴弦jerry的博客主站地址:http://www.jerry-zhang.com
瀏覽更多技術博客,請移步至:http://www.jerry-zhang.com
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。