看板 Flash 關於我們 聯絡資訊
※ 引述《HsuanTang (HsuanTang)》之銘言: : 但操作起來 : 它會先卡住一下 然後才連續移動 : 有點不太順暢 其實這種遊戲操作已經有種算是標準的監聽方式了 "每次偵測到key down事件的時候移動一次" 會因為使用者的鍵盤硬體限制和軟體設定而產生不同效果 所以應該要 "每個frame偵測一次按鍵狀態,若被按下則移動" 然後利用監聽key down/up事件來更新按鍵狀態 var leftIsDown:Boolean = false; var rightIsDown:Boolean = false; function onKeyDown(e:KeyboardEvent):void { switch (e.keyCode) { case Keyboard.LEFT : leftIsDown = true; break; case Keyboard.RIGHT: rightIsDown = true; break; } } function onKeyUp(e:KeyboardEvent):void { switch (e.keyCode) { case Keyboard.LEFT : leftIsDown = false; break; case Keyboard.RIGHT: rightIsDown = false; break; } } function onEnterFrame(e:Event):void { var dx:Number = 0; if (leftIsDown ) dx -= SPEED; if (rightIsDown) dx += SPEED; object.x += dx; } 當然,要監聽所有按鍵,可以用個Array、Dictionary、或Object來儲存所有按鍵狀態 我之前有寫一個簡單的Key class,可以參考看看 http://cjcat.googlecode.com/svn/trunk/src/idv/cjcat/ui/Key.as 另外,也可以額外提供函式讓使用者詢問 "按鍵是否在上一個frame被按下/放開" 這樣的話需要提供一個udpate()函式,並且要求使用者每個frame開始的時候呼叫一次 可以參考Rusher 2 Game Engine的Keyboard.isPressed()和isReleased() http://rusher.googlecode.com/svn/trunk/src/idv/cjcat/rusher/ui/Keyboard.as 另外一種做法是儲存兩個大小約為256(最大key code)的Array 分別用來儲存當前和目前的frame的按鍵狀態 如果同一個鍵的狀態在兩個Array中的值不同 就表示該鍵在上一個frame被按下或放開 以上 -- Blog http://blog.cjcat.net Gallery http://cjcat2266.deviantart.com ptt2 Board CJWorkshop -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 72.5.59.140
dsmwang:cjcat!! 02/16 02:57
HsuanTang:flash的dynamic variable真的好奇妙 02/16 21:18
HsuanTang:之前不知道有Dictionary這種東西耶 等等來用用看 02/16 21:19
HsuanTang:謝謝cjcat! 02/16 21:20