【as3】键盘事件
在AS3中,鍵盤事件是由KeyboardEvent類來處理的,屬于flash.events包里面,有兩種類型的鍵盤事件:KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP,對于鍵的代碼獲得我們通過keyCode這個屬性
其實鍵盤事件使用起來還是相當方便,下面直接看實例:
建立一個新的AS文件main.as,輸入下面代碼:
package {
??? import flash.display.Sprite;
??? import flash.events.KeyboardEvent;
??? import flash.ui.Keyboard;
??? import flash.events.MouseEvent;
??? public class main extends Sprite {
??????? private function keyEvt(event:KeyboardEvent):void {
??????????? trace(event.keyCode);
??????????? switch (event.keyCode) {
??????????????? case Keyboard.UP :
??????????????????? event.target.y-=10;
??????????????????? break;
??????????????? case Keyboard.DOWN :
??????????????????? event.target.y+=10;
??????????????????? break;
??????????????? case Keyboard.LEFT :
??????????????????? event.target.x-=10;
??????????????????? break;
??????????????? case Keyboard.RIGHT :
??????????????????? event.target.x+=10;
??????????????????? break;
??????????????? default :
??????????????????? break;
??????????? }
??????? }
????????
??????? public function main():void {
??????????? var sp:Sprite=new Sprite();
??????????? sp.graphics.beginFill(0x0000ff);
??????????? sp.graphics.drawRect(200,200,100,100);
??????????? sp.graphics.endFill();
??????????? addChild(sp);
??????????? sp.buttonMode=true;
??????????? sp.addEventListener(KeyboardEvent.KEY_DOWN,keyEvt);
????????????
??????? }
??? }
}
以上代碼主要功能為繪制一個矩形,然后通過鍵盤的方向鍵控制其運動。關于如何將這文檔類運用到FLA文件中去,我這就不啰嗦了。值得注意的是,我這里的sp為一個sprite類型的實例,它的buttonMode也設為了True,因此我們在運行的時候首先先讓這個實例獲得焦點,然后才可以按下方向鍵控制其運動,如果我們不將buttonMode設為true的話,即使我們鼠標點擊后都不可以讓其進行運行,除非我們通過stage.focus=sp來指定當前焦點對象。但是這在實例周圍會有一個焦點的框框,而且鼠標一旦點擊后將會失去焦點,后就再也無法通過鍵盤進行移動。或許說得有點啰嗦,但大家試一試就可以發(fā)覺。我一直想找一個去掉這高亮顯示的框框,可惜一直未找到有效的方法,大家如果有好的請告訴我。
在鍵盤事件中除了keyCode還有一個屬性比較實用,就是keyLocation,這個是確定此鍵再鍵盤上的位置,特別是在shift、ctrl、alt上面,由于有左右兩邊,應該此屬性可以告訴你你當前按下的是左邊的還是右邊的。
去掉焦點邊框后并單擊重新獲得焦點代碼示例:09-2-28補
package {
??? import flash.display.Sprite;
??? import flash.events.KeyboardEvent;
??? import flash.ui.Keyboard;
??? import flash.events.MouseEvent;
??? public class main3 extends Sprite {
??????? private function keyEvt(event:KeyboardEvent):void {
??????????? trace(event.keyCode+"|"+event.keyLocation);
??????????? switch (event.keyCode) {
??????????????? case Keyboard.UP :
??????????????????? event.target.y-=10;
??????????????????? break;
??????????????? case Keyboard.DOWN :
??????????????????? event.target.y+=10;
??????????????????? break;
??????????????? case Keyboard.LEFT :
??????????????????? event.target.x-=10;
??????????????????? break;
??????????????? case Keyboard.RIGHT :
??????????????????? event.target.x+=10;
??????????????????? break;
??????????????? default :
??????????????????? break;
??????????? }
??????? }
????????
??????? private function clickFun(evt:MouseEvent):void
??????? {
??????????? stage.focus=Sprite(evt.target);
????????????
??????????? }
????????
??????? public function main3():void {
??????????? var sp:Sprite=new Sprite();
??????????? sp.graphics.beginFill(0x0000ff);
??????????? sp.graphics.drawRect(200,200,100,100);
??????????? sp.graphics.endFill();
??????????? addChild(sp);
??????????? stage.stageFocusRect=false;
??????????? stage.focus=sp;
????????????
??????? sp.addEventListener(KeyboardEvent.KEY_DOWN,keyEvt);
??????????? sp.addEventListener(MouseEvent.CLICK,clickFun);
??????? }
??? }
}
轉載于:https://www.cnblogs.com/YY-1028/archive/2012/04/28/2475485.html
總結
- 上一篇: Oracle Spatial构建自定义投
- 下一篇: 求一个qq一字网名