Android平臺消息響應(yīng)機(jī)制的研究及其觸摸屏響應(yīng)的優(yōu)化實(shí)現(xiàn)
上面是聲音界面的觸摸響應(yīng)處理:event.getAction()是鍵控的類型,是MotionEvent 類的系統(tǒng)方法,獲取當(dāng)前的觸摸響應(yīng)。當(dāng)向下觸摸屏幕時,就響應(yīng)MotionEvent.ACTION_DOWN這個動作,當(dāng)觸點(diǎn)滿足給定的區(qū)間范圍,就執(zhí)行相當(dāng)?shù)牟僮?,?shí)現(xiàn)游戲的狀態(tài)跳轉(zhuǎn)。觸摸范圍在劃分的時候最好以屏幕的相對位置為參考點(diǎn),這樣在應(yīng)用橫豎屏的處理或者應(yīng)用移植的時候會更方便,避免了頻繁修改參考坐標(biāo)的值。在程序入口處繼承Activity 的子類中可以獲取當(dāng)前設(shè)備屏幕寬和高的具體屬性,這樣觸摸范圍確定時以屏幕的寬和高的屬性值來定位就可以了。整個觸摸部分的流程圖如下:
圖2 觸摸屏操作響應(yīng)的具體流程
圖 2 顯示的是游戲過程中觸摸屏幕時具體的響應(yīng)流程,主要涉及到Activity 類和View類。在Activity 類中進(jìn)行觸摸方法onTouchEvent()的聲明,在View 類中對該方法進(jìn)行詳細(xì)定義和說明。當(dāng)觸摸響應(yīng)后,觸發(fā)事件響應(yīng)機(jī)制,event 對象通過getAction()方法獲取觸摸響應(yīng),獲得當(dāng)前的觸摸點(diǎn)坐標(biāo)event.getX()和event.getY(),與方法中的觸摸范圍進(jìn)行判斷,若在區(qū)域內(nèi)則執(zhí)行觸摸響應(yīng)。觸摸響應(yīng)執(zhí)行后需要在觸摸釋放MotionEvent.ACTION_DOWN進(jìn)行觸摸釋放的處理,及時釋放當(dāng)前的觸摸響應(yīng)。
3 Android 平臺觸摸響應(yīng)的優(yōu)化
值得注意的是,上面觸摸響應(yīng)MotionEvent.ACTION_DOWN 中,特意定義了一個臨時觸摸計數(shù)變量keyCount,當(dāng)計數(shù)變量加到一定的程度時候才執(zhí)行觸摸響應(yīng)。這樣處理能有效地防止連續(xù)觸摸響應(yīng),觸摸不釋放而直接跳到下一個狀態(tài),觸摸變量的設(shè)置在各個界面跳轉(zhuǎn)過程中尤其是游戲菜單中各界面跳轉(zhuǎn)中是很有必要的。
觸摸響應(yīng)中除了各個菜單界面的響應(yīng)以外還有一個重要的響應(yīng)就是游戲中對主角的操控。主游戲界面的觸摸響應(yīng)原理和菜單界面是一致的,不同的是觸摸判斷范圍的選取有差異,菜單界面各個觸摸范圍是固定的,而游戲界面觸摸區(qū)域的劃定是動態(tài)的。由于在角色扮演等游戲中主角是核心人物,因此對主角的操控的觸摸響應(yīng)顯得尤其重要,進(jìn)行觸摸設(shè)計的時候一般以主角為中心進(jìn)行設(shè)計,以主角的坐標(biāo)作為基本點(diǎn)來判斷。
圖3 主角控制時區(qū)域的劃分
圖 3 所示的是主角移動時候的區(qū)域劃分,以水平和垂直坐標(biāo)軸的交點(diǎn)作為主角的坐標(biāo)中心點(diǎn),將主角周邊的區(qū)域劃分為10 個區(qū)域,觸點(diǎn)在區(qū)域9-10 的時候方向向右,對稱的區(qū)域5-6 的時候方向向左,區(qū)域7-8 的時候方向向下。對于區(qū)域1-4 進(jìn)行進(jìn)一步的劃分,2-3 區(qū)域方向向上,只響應(yīng)向上的操作,區(qū)域1 同時響應(yīng)右鍵和上鍵,區(qū)域4 同時響應(yīng)左鍵和上鍵。這樣對區(qū)域進(jìn)行細(xì)化符合實(shí)際情況,區(qū)域1 和區(qū)域4 的角度范圍可以根據(jù)實(shí)際情況微調(diào)。
評論