Re: [問題] 請問怎麼讓FLASH裡的物件平滑移動
※ 引述《euph (咬咬嚼嚼猴子口味)》之銘言:
: 是這樣的 我建立了一個MovieClip物件
: 我希望用鍵盤的上下鍵來上下移動這物件的位置
: 用最基礎的 object._y += offset
: 會讓物件在移動的時候有卡卡的感覺
: 有想要利用tween去試著補間
: 可是我的長度和移動距離都是動態給予
: 想請問一下 可以在AS裡面去做tween嗎??
: 如果可以 請問有沒有參考的網站或例子可以分享呢??
: 謝謝各位前輩幫忙 :)
不好意思,重看了你的問題感覺好像搞錯了你的意思。
看到tween就直覺回應那個網站,雖然那個也可以解決你的問題,
不過不太適合。
你的問題應該是感覺按下方向鍵時,會先動一下,再卡一下,然後才會正常連續移動。
如果是的話,那可以參考以下作法。
基本上這個問題是鍵盤事件觸發原理所影響的,
通常我的作法是將按鍵 被按下、被放開 以及 enterFrame事件 分開處理
1.先設定一個變數或物件 是用來記錄目標按鍵目前是否是被按下的
2.在被按下監聽中 當為目標鍵時 將變數設定為被按下的狀態
3.在被放開的監聽中 當為目標鍵時 將變數設定為未被按下的狀態
4.在enterFrame監聽中 如果變數的狀態是被按下 則執行要移動的方向
註:enterFrame可以用timer或是類似的功能去取代
如果你是用AS3的話 可以這樣做
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
var keyStatus:Object = { };
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpEvent);
addEventListener(Event.ENTER_FRAME, onEnterFrameEvent);
function onKeyDownEvent(e:KeyboardEvent):void {
keyStatus[e.keyCode] = true;
}
function onKeyUpEvent(e:KeyboardEvent):void {
keyStatus[e.keyCode] = false;
}
function onEnterFrameEvent(e:Event):void {
if (keyStatus[Keyboard.UP] == true) {
// 執行往上移動事件
}
if (keyStatus[Keyboard.DOWN] == true) {
// 執行往下移動事件
}
}
如果是AS2 也是可以用類似的概念,不過我太久沒用都忘記了
如果想要更平滑的移動 就再增加目前方向速度、加速度等參數來控制
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.238.181.128
※ 編輯: zpl 來自: 36.238.181.128 (05/23 11:15)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Flash 近期熱門文章
PTT數位生活區 即時熱門文章