作者cjcat2266 (CJ Cat)
看板Flash
標題Re: [心得] 小朋友下樓梯
時間Thu Feb 16 02:35:54 2012
※ 引述《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