亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1507 | 回復(fù): 0
打印 上一主題 下一主題

Flash游戲開(kāi)發(fā)之按鍵控制(復(fù)合鍵,八方向鍵) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-12-22 08:54 |只看該作者 |倒序?yàn)g覽
Flash游戲開(kāi)發(fā)中,按鍵處理很重要,按鍵處理的效果,直接影響用戶的游戲體驗(yàn)。Flash按鍵處理說(shuō)簡(jiǎn)單就簡(jiǎn)單,說(shuō)麻煩也麻煩,尤其對(duì)于復(fù)合鍵的處理。

我舉個(gè)例子:有這樣一個(gè)游戲角色移動(dòng)的游戲,需要角色具有八方向移動(dòng),如果用戶先按下←鍵,游戲角色向左移動(dòng),這時(shí)候用戶又按下↓鍵(←鍵不抬起),這時(shí)候游戲角色要向左下角移動(dòng),接下來(lái),如果用戶抬起↓鍵(←鍵不抬起),游戲角色轉(zhuǎn)為繼續(xù)左行,如果用戶抬起←鍵(↓鍵不抬起),游戲角色轉(zhuǎn)為繼續(xù)下行。同樣的,向上,向右按鍵也是類似的需求,而且這時(shí)候,如果用戶按下了其它的按鍵,或按下多于三個(gè)光標(biāo)鍵時(shí),最后按下的鍵要忽略。

對(duì)于這種涉及復(fù)合鍵的處理,大家可以寫(xiě)一個(gè)試試是否容易,或者說(shuō)是否足夠完美。

這就是今天想說(shuō)的內(nèi)容,也是我在Flash 游戲開(kāi)發(fā)中對(duì)按鍵控制的一點(diǎn)小經(jīng)驗(yàn),希望能對(duì)從事Flash游戲開(kāi)發(fā)的同行們有所幫助。

一、先熟悉一下與制作按鍵相關(guān)的事件和語(yǔ)法
1).Key 類

A).Key類的事件

i) onKeyDown = function() {}

當(dāng)按下某按鍵時(shí)獲得通知。同時(shí)只能由一個(gè)按鍵觸發(fā),如果有多個(gè)按鍵按下,以先后次序觸發(fā)。若要使用 onKeyDown,必須創(chuàng)建一個(gè)偵聽(tīng)器對(duì)象。然后可以為 onKeyDown 定義一個(gè)函數(shù),并使用 addListener() 向 Key 對(duì)象注冊(cè)該偵聽(tīng)器,如下面的示例所示:

var keyListener:Object = new Object();
keyListener.onKeyDown 
= function() {
    trace(
"DOWN -> Code: "+Key.getCode()+"\tACSII: "+Key.getAscii()+"\tKey: "+chr(Key.getAscii()));
};
keyListener.onKeyUp 
= function() {
    trace(
"UP -> Code: "+Key.getCode()+"\tACSII: "+Key.getAscii()+"\tKey: "+chr(Key.getAscii()));
};
Key.addListener(keyListener);

ii) .onKeyUp = function() {}

當(dāng)釋放某按鍵時(shí)獲得通知。同時(shí)只能由一個(gè)按鍵觸發(fā),如果有多個(gè)按鍵按下后再抬起,以最后按下的鍵觸發(fā)。若要使用 onKeyUp,必須創(chuàng)建一個(gè)偵聽(tīng)器對(duì)象。然后可以為 onKeyUp 定義一個(gè)函數(shù),并使用 addListener() 向 Key 對(duì)象注冊(cè)該偵聽(tīng)器,示例同上。

這二個(gè)按鍵事件,在四方向游戲中,配合Key.isDown,完全夠用了。今天主要重點(diǎn)是在八方向鍵的處理上,下邊繼續(xù)說(shuō)。

B).Key類的方法
i) Key.isDown 方法
如果按下 keycode 中指定的鍵,則返回 true;否則返回 false。
如:
car_mc.onEnterFrame = function() {
 
if (Key.isDown(Key.RIGHT)) {
 
this._x += 10;
 } 
else if (Key.isDown(Key.LEFT)) {
 
this._x -= 10;
 }
};

常見(jiàn)keycode(是Key類的靜態(tài)屬性):

修飾符

屬性

說(shuō)明

static

BACKSPACE:Number

Backspace 鍵的鍵控代碼值 (8)。

static

CAPSLOCK:Number

Caps Lock 鍵的鍵控代碼值 (20)。

static

CONTROL:Number

Ctrl 鍵的鍵控代碼值 (17)。

static

DELETEKEY:Number

Delete 鍵的鍵控代碼值 (46)。

static

DOWN:Number

下箭頭鍵的鍵控代碼值 (40)。

static

END:Number

End 鍵的鍵控代碼值 (35)。

static

ENTER:Number

Enter 鍵的鍵控代碼值 (13)。

static

ESCAPE:Number

Esc 鍵的鍵控代碼值 (27)。

static

HOME:Number

Home 鍵的鍵控代碼值 (36)。

static

INSERT:Number

Insert 鍵的鍵控代碼值 (45)。

static

LEFT:Number

左箭頭鍵的鍵控代碼值 (37)。

static

_listeners:Array [只讀]

一個(gè)引用列表,引用對(duì)象是向 Key 對(duì)象注冊(cè)的所有偵聽(tīng)器對(duì)象。

static

PGDN:Number

Page Down 鍵的鍵控代碼值 (34)。

static

PGUP:Number

Page Up 鍵的鍵控代碼值 (33)。

static

RIGHT:Number

右箭頭鍵的鍵控代碼值 (39)。

static

SHIFT:Number

Shift 鍵的鍵控代碼值 (16)。

static

SPACE:Number

空格鍵的鍵控代碼值 (32)。

static

TAB:Number

Tab 鍵的鍵控代碼值 (9)。

static

UP:Number

上箭頭鍵的鍵控代碼值 (38)。


其它的字母鍵并沒(méi)有定義成靜態(tài)屬性,需要使用數(shù)字的鍵控代碼值來(lái)使用,有人寫(xiě)了一個(gè)所有按鍵的Key類,我復(fù)制在下邊,可做參考:

自定義Key類

ii) Key.getCode 方法
返回按下的最后一個(gè)鍵的鍵控代碼值,并且不會(huì)區(qū)分字母的大小字,即使用此方法時(shí),任何一個(gè)按鍵,只有一個(gè)Code值。

2).MovieClip的事件

i) MovieClip.onKeyDown 
當(dāng)影片剪輯具有輸入焦點(diǎn)并且用戶按下某個(gè)鍵時(shí)調(diào)用。

ii) MovieClip.onKeyUp
當(dāng)釋放按鍵時(shí)調(diào)用。僅當(dāng)影片剪輯的輸入焦點(diǎn)被啟用和設(shè)置后,onKeyUp 事件處理函數(shù)才能起作用。即要求影片剪輯具有輸入焦點(diǎn)。

二、Flash中對(duì)按鍵捕獲處理,拔開(kāi)按鍵的迷霧

1).Flash中,如果你使用Key.onKeyDown 事件偵聽(tīng)器,則不管焦點(diǎn)在Flash內(nèi)的那個(gè)對(duì)象上,按鍵均能被捕獲,這里有一種情況,當(dāng)先后按下多個(gè)鍵(二個(gè)以上的按鍵)時(shí),onKeyDown事件是按先后次序觸發(fā)的,而onKeyUp事件只能由最后按下的鍵觸發(fā)。舉例:
我先按下A鍵,再接著按下S鍵,同時(shí)A鍵不抬起,則這時(shí)候,onKeyDown先被A鍵觸發(fā)一次,接著被S鍵觸發(fā)一次,而這時(shí)候,不管你把那個(gè)鍵抬起,onKeyUp事件始終是由最后按下的那個(gè)鍵觸發(fā)的。這點(diǎn)一定要注意,這時(shí)候A鍵的onKeyUp事件已經(jīng)被后按的鍵“沖”掉了,就算抬起A鍵,onKeyUp也不會(huì)被觸發(fā)?梢允褂帽疚拈_(kāi)頭那段代碼測(cè)試就知道了。

2).使用Key.isDown,可以知道有那些鍵被按下,不管按鍵的先后(其實(shí)是有先后的,只是先后時(shí)間差別太小,isDown方法并判斷不出先后次序,要判斷次序,需要借助其它方法),只要按下,此方法就能檢測(cè)出,如:


當(dāng)你先后同時(shí)按下a,s,d,f這四個(gè)鍵時(shí),都會(huì)被檢測(cè)到。
利用這點(diǎn),我們就可以制作游戲中的復(fù)合鍵,比如八方向鍵,或快捷鍵,如Ctrl+F等。

3).如果同時(shí)按下了多個(gè)鍵,那么如何知道先后次序呢?
還記得Key.getCode的用法說(shuō)明嗎?“返回按下的最后一個(gè)鍵的鍵控代碼值”,同樣的,此方法也不能獲得按鍵的先后次序,但是它可以獲得最后一個(gè)按鍵,使用它的這一特性,我們可以寫(xiě)出自己的檢測(cè)類,用來(lái)當(dāng)按下多鍵時(shí),檢測(cè)按鍵的次序。如:


使用此段代碼,你可以嘗試著同時(shí)按下a,s,d,f鍵,可以看看按鍵次序。

4).其實(shí)Flash按鍵的難于處理,主要是在于復(fù)合鍵的處理上,在多復(fù)合鍵中,如果用戶有意按下多鍵,如何拋棄或“不理睬”不想關(guān)注的按鍵呢?
比如光標(biāo)鍵吧,我們想在按下左光標(biāo)+上光標(biāo)鍵時(shí),人物向左上角斜方向移動(dòng),那如果這時(shí)候,用戶又按下向下的光標(biāo)鍵呢,或者又按了其它的字母鍵呢?這時(shí)候往往會(huì)出現(xiàn)我們不想要的結(jié)果。即最后按鍵會(huì)干擾已按下的組合鍵。處理這種情況,除了寫(xiě)較復(fù)雜的if判斷之外,就可以使用上邊說(shuō)的檢測(cè)按鍵次序,這樣只有前兩個(gè)按鍵有效,后邊再按下的鍵就無(wú)效,從而達(dá)到控制的目的。

5).其實(shí)很多時(shí)候,我們是通過(guò)光標(biāo)控制一個(gè)MovieClip的移動(dòng)的,那么如果在此使用MovieClip的按鍵事件下處理按鍵,就要注意MovieClip是與焦點(diǎn)相關(guān)的,如果有多個(gè)對(duì)象,那就得處理焦點(diǎn)一定在要移動(dòng)的對(duì)象上頭,按鍵才有效,除此之外,它的按鍵事件使用原理同Key的按鍵事件原理,所以大多數(shù)時(shí)候,我們并不使用MovieClip的按鍵事件,而改用MovieClip.onEnterFrame來(lái)偵聽(tīng)按鍵。下邊我給了一個(gè)示例,就是使用的這個(gè)方法。

三、八方向按鍵示例  新窗口打開(kāi)>>

 

四、八方向按鍵源碼下載

點(diǎn)此下載(6K)>>
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP