Re: [心得] 小朋友下樓梯
※ 引述《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
推
02/16 02:57, , 1F
02/16 02:57, 1F
推
02/16 21:18, , 2F
02/16 21:18, 2F
→
02/16 21:19, , 3F
02/16 21:19, 3F
→
02/16 21:20, , 4F
02/16 21:20, 4F
討論串 (同標題文章)