琴弦jerry的博客主站地址:http://www.jerry-zhang.com
我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、額敏ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的額敏網(wǎng)站制作公司瀏覽更多技術(shù)博客,請移步至:http://www.jerry-zhang.com
本著實(shí)踐和動手第一的原則,我稍稍看了一些資料和簡單的開發(fā)代碼之后,對游戲開發(fā)有了一個(gè)初步的認(rèn)識。迫不及待想要弄一個(gè)小東西。一定要讓個(gè)什么東西在即的手中動起來。一開始我是想到了之前我都手機(jī)上的那個(gè)直升飛機(jī)游戲。飛機(jī)一直下落,按下一個(gè)鍵飛機(jī)就飛高。一高一低的躲避前面的障礙物。 不過自己不知道什么原因就想到了一只逃跑的老鼠被人用繩子綁住了尾巴。(看,人們總是這么殘忍。)
上一篇文章本來就想寫這個(gè)demo。結(jié)果前面開篇扯了一些游戲的相關(guān)知識,沒想到就一大篇了,所以上一篇單獨(dú)一篇作為預(yù)備知識(覺的自己很無恥)。
下看看丑陋的最后界面效果圖。期望不要太高,本篇只是簡單的畫圖、按鍵觸摸屏的輸入響應(yīng)。只是簡單的可以動。
嘿嘿,一直悲慘的老鼠,圖片資源來自google圖片搜索。
這個(gè)project 結(jié)構(gòu)介紹。其實(shí)就是比基本的helloword多了一個(gè)自己定義的DrawView該類繼承自View,主要用來顯示圖畫。一個(gè)Activity類 主要用來接收按鍵和觸屏事件。然后放只老鼠在drawable里面,這里我氣的名字叫mouse ,以后我們就可以用R.drawable.mouse 召喚老鼠。
就這么兩個(gè)java文件。讓我先來唧唧歪歪一大段,然后放出大家,如果你覺得羅嗦直接忽略漢字看代碼。
先看GameTestActivity (就是該project中唯一的Activity)
直接在Oncrate方法里面設(shè)置主view 為我們自定義DrawView。
重寫onKeyUp,onKeyDown 方法來接收按鍵事件,然后處理。(你的手機(jī)或者模擬器上需要有按鍵哦—— 廢話么 ~)
重寫onTouchEvent方法用來接收觸屏事件,然后處理。(親,你的手機(jī)或者模擬器要有屏幕,并且可以觸摸或點(diǎn)擊哦。——找打?。?/p>
然后看我們的DrawView,用來顯示動畫,負(fù)責(zé)繪制和刷新畫面。
寫構(gòu)造器,構(gòu)造器里面主要是初始化 畫筆 及老鼠的初始坐標(biāo)。
重寫onDraw方法 ,該方法在構(gòu)造器后執(zhí)行,用來繪制該view的界面,調(diào)用invalidate 可以再次調(diào)用該方法,重新繪制view界面。
自己寫個(gè)讓老鼠向左向右移動的方法 moveLeft 和moveRight 。
- void
- void
- 3//為了讓向右跑的時(shí)候可以更快些 幅度設(shè)置為3.
然后需要讓這個(gè)老鼠自動往左跑。我們添加一個(gè)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;//定義成變量 后面我們利用這個(gè)對象引用調(diào)用讓老鼠移動的方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDrawView = new DrawView(this);
setContentView(mDrawView);//設(shè)置主view
}
private void pullMouse(boolean pull){
mDrawView.setPulling(pull);// 將 pull的標(biāo)識位 表示為 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) {
//按鍵放開的時(shí)候,放開的瞬間
case KeyEvent.KEYCODE_SEARCH:
pullMouse(false);
break;
default:
break;
}
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
//和觸屏不同,一直按著也可以觸發(fā)事件
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);
該方法第一個(gè)參數(shù)是一個(gè)線程,就是要不斷執(zhí)行的任務(wù)描述。這里我們是不斷的發(fā)送讓老鼠向左移動的命令。
第二個(gè)參數(shù) 是第一次執(zhí)行該方法間隔的毫秒數(shù)
第三個(gè)參數(shù) 是后面執(zhí)行該方法時(shí) 需要間隔的時(shí)間 毫秒單位
一個(gè)砍人的現(xiàn)場你會感覺到 handler像一個(gè)劊子手,隨時(shí)等候各種不動的命令。而timertast 想一個(gè)小領(lǐng)導(dǎo),或者一個(gè)發(fā)命令的機(jī)器。
而timer的schedule 就像是總指揮。
這個(gè)時(shí)候你就感覺是總指揮給小領(lǐng)導(dǎo)說你每過2分鐘給劊子手發(fā)個(gè)命令。
而小領(lǐng)導(dǎo)就美國2分鐘發(fā)個(gè)命令給劊子手, 每過2分鐘給劊子手是 “砍!” 。
而劊子手聽到 “砍!” 就直接砍了。
到這里應(yīng)該比較清楚的說明了這只可憐的丑陋的老鼠是如何被我們玩弄的了。大家可以玩弄自己想玩弄的東西。不要太暴力哦。剛剛開始學(xué)習(xí)游戲開發(fā),文章總有不準(zhǔn)確或者錯(cuò)誤之處,還請各位一定指出。
至于本文中的整體項(xiàng)目代碼我計(jì)劃隨著文章的更新,將會有一個(gè)比較完善一個(gè)的版本,那個(gè)時(shí)候統(tǒng)一上傳,提供大家下載。
不過如果有朋友需要該文章中代碼也可以直接聯(lián)系我索取。琴弦jerry的博客主站地址:http://www.jerry-zhang.com
瀏覽更多技術(shù)博客,請移步至:http://www.jerry-zhang.com
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。