Re: [心得] 小朋友下樓梯

看板Flash作者 (CJ Cat)時間12年前 (2012/02/16 02:35), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
cjcat!!
02/16 02:57, 1F

02/16 21:18, , 2F
flash的dynamic variable真的好奇妙
02/16 21:18, 2F

02/16 21:19, , 3F
之前不知道有Dictionary這種東西耶 等等來用用看
02/16 21:19, 3F

02/16 21:20, , 4F
謝謝cjcat!
02/16 21:20, 4F
文章代碼(AID): #1FE_iDJH (Flash)
討論串 (同標題文章)
文章代碼(AID): #1FE_iDJH (Flash)