1. 程式人生 > 其它 >程式碼設定 鍵盤適應_FLASH遊戲製作基礎:響應鍵盤的四種方法

程式碼設定 鍵盤適應_FLASH遊戲製作基礎:響應鍵盤的四種方法

技術標籤:程式碼設定 鍵盤適應

響應鍵盤的方法作為 AS 中的一個重要組成部分,在如今已經越來越廣泛的使用,尤其是在 FLASH 遊戲製作中,如果缺少了響應鍵盤的方法,那是不可能的,而響應鍵盤的方法主要的四種,分別是:    1 、利用按鈕進行檢測    2 、利用 KEY 物件    3 、利用鍵盤偵聽的方法    4 、利用影片剪輯的 keyUpkeyDown 事件來實現響應鍵盤   只有熟練掌握了這些方法,然後加以變通的話,就會得到很多意想不到的效果,下面我就結合理論和自己的想法簡要的介紹一下。   第一種響應鍵盤的方法:利用按鈕進行檢測來實現響應鍵盤
  在按鈕的 on 事件處理函式中不但可以對滑鼠事件作出響應,而且可以對鍵盤事件作出響應。 如在按鈕的動作面板中加入如下所示的程式碼,在敲擊鍵盤上的 X 鍵時輸出視窗中將提示: X is pressed 在按鈕上加上: 48b7d31baf1d0a43094bc20f99458998.gif

ffice:office" />

on (keyPress "x") { trace("X is pressed");
}
  但是要注意的是:檢測鍵盤上的字母鍵時,字母都應為小寫。如果要檢測鍵盤中的特殊鍵, Flash 中有一些專門的程式碼來表示它們,下面列出了一些常用的功能鍵的表示程式碼:  如要檢測鍵盤上的鍵,可以使用下面的 ActionScript
on (keyPress "") { trace("Left is pressed");
}
  另外,你可以在一個按鈕中加入若干個 on 函式,也可以在一個 on 函式中結合多種事件,這使 您可以為按鈕定義自己熟悉常用的快捷鍵,如下所示:
on (release, keyPress "") { _root.myMC.prevFrame();
}
on (release, keyPress "") {
 _root.myMC.nextFrame();
}
  上面的第一個語句實現單擊按鈕或按鍵盤上的左方向鍵,控制影片剪輯 myMC
回退 1 幀,而上面的第二個語句實現單擊按鈕或按鍵盤上的右方向鍵,控制影片剪輯 myMC 前進 1 幀。 第二種響應鍵盤的方法:利用Key物件來實現響應鍵盤的操作   利用按鈕檢測按鍵動作很有效,但是並不利於檢測持續按下的鍵,所以不適合於製作某些通過鍵盤控制的遊戲。   這時,您就需要用到Key物件。Key物件包含在動作面板的“物件”/“影片”目錄下面,它由Flash內建的一系列方法、常量和函式構成。使用Key物件可以檢測某個鍵是否被按下,如要檢測左方向鍵是否被按下,可以使用如下ActionScript if (Key.isDown(Key.LEFT)) { trace("The left arrow is down"); }   函式Key.isDown返回一個布林值,當該數中的引數對應的鍵被按下時返回true,否則返回false。常量Key.LEFT代表鍵盤上的左方向鍵。當左方向鍵被按下時,該函式返回true   Key物件中的常量代表了鍵盤上相應的鍵,下面列出了一些基本的常量:   一些功能鍵的表示: Key.BACKSPACE Key.ENTER Key. 65be24896e30b2eab442e242f3a66d80.gif

GDN
Key.CAPSLOCK Key.ESCAPE Key.RIGHT
Key.CONTROL Key.HOME Key.SHIFT
Key.DELETEKEY Key.INSERT Key.SPACE
Key.DOWN Key.LEFT Key.TAB
Key.END Key.PGUP Key.UP

  以上是鍵盤上的功能鍵,那麼如何表示鍵盤上的字母鍵呢?  Key物件提供了一個函式Key.getCode來實現這一功能,如下所示: if (Key.isDown(Key.getCode("x"))) { trace("X is pressed"); }   上面指令碼的意思就是,利用Key.getCode函式來告訴系統你是否按下了x鍵,如果按下了x鍵以後,函式Key.isDown則會返回true,在輸出視窗就會輸出X is pressed 第三種響應鍵盤的方法:利用鍵盤偵聽的方法來實現響應鍵盤(個人習慣用這種方法)   假設在影片剪輯的onClipEvent(enterFrame)事件處理函式中檢測按鍵動作,而影片剪輯所在的時間軸較長,或計算機運算速度較慢,就有可能出現這種情況:即當在鍵盤上按下某個鍵時還未來得及處理onClipEvent(enterFrame)函式,那麼按鍵動作將被忽略,這樣的話,很多你想要的效果就會無法實現了。另外,還有一個需要解決的問題就是,在某些遊戲(如射擊)中,我們需要按一次鍵就執行一次動作(發射一發子彈),即使長時間按住某個鍵不放也只能算作一次按鍵,而Key物件並不能區別是長時間按住同一個鍵還是快速地多次按鍵。   所以如果要解決這個問題,就需要用到鍵盤偵聽的方法。你可以使用 “偵聽器(listener)”來偵聽鍵盤上的按鍵動作。   要使用偵聽器之前,首先需要建立它,你可以使用如下所示的命令來告訴計算機你需要偵聽某個事件: Key.addListener(_root);   Key.addListener命令將 主時間軸 或 某個影片剪輯作為它的引數,當偵聽的事件發生時,可以用這個引數指定的物件來響應該事件。   上面的程式碼指定主時間軸來響應該事件。要讓主時間軸對該事件作出響應,還需要設定一個相應的事件處理函式,否則設定偵聽器就沒有什麼意義了。   鍵盤偵聽的事件處理函式有兩個:onKeyUponKeyDown,如下所示: Key.addListener(_root); _root.onKeyUp = function() { trace(Key.getAscii()); }; // 程式碼的意思是,當按下一個鍵並釋放後,輸出視窗將輸出你按下的那個鍵的Ascii   當然,你也可以使用影片剪輯作為偵聽鍵盤的物件,只需要使用影片剪輯的路徑代替_root作為Key.addListener命令的引數就可以了。   比如下面程式碼: Key.addListener(_root.mc); _root.mc.onKeyUp = function() { trace(Key.getAscii()); };   程式碼的意思是,當按下一個鍵並釋放後,輸出視窗將輸出你按下的那個鍵的Ascii,意思差不多,但是鍵盤偵聽物件不同,一個是影片mc,一個是主時間軸。 第四種響應鍵盤的方法:利用影片剪輯的keyUpkeyDown事件來實現響應鍵盤   最後一種方法很容易被忽視,但是也有一定的應用價值,最重要的是把概念弄清楚。   影片剪輯包含兩個與鍵盤相關的事件keyUpkeyDown,使用它們也可以實現對按鍵事件的響應   例如下面的程式碼: onClipEvent (keyDown) { trace(Key.getAscii()); } // 當按下鍵盤上的一個鍵的時候,輸出視窗將輸出按下的這個鍵的Ascii碼值。   函式Key.getAscii表示返回與按鍵相對應的ASCII碼,其中 ASCII碼是一個整數,鍵盤上的每個字元對應一個ASCII碼,如字母A對應的ASCII碼為65B對應的ASCII碼為66a對應的ASCII碼為97, b對應的ASCII碼為98+ 對應的ASCII碼為43等。需要注意的是:只有字元鍵才有ASCII碼,鍵盤上的功能鍵是沒有ASCII碼的。如果我想在輸出視窗中輸出與按鍵相對應的字元,那怎麼辦?這時候,你可以使用String物件的fromCharCode函式將ASCII碼轉換成字元,如將上例的程式碼改成如下所示: onClipEvent (keyDown) { trace(String.fromCharCode(Key.getAscii())); }; // 意思就是說,當按下鍵盤的一個鍵,輸出按下的這個鍵相對應的字元,當然除了功能鍵。   關於String物件的詳細解釋,大家可以檢視動作面板的“物件”/“核心”目錄下面。