作者cjcat2266 (CJ Cat)
看板Flash
標題Re: [實驗] 準時的 Timer
時間Tue Apr 29 23:23:54 2008
這個主題在EAS3還是AS2 Bible中有探討過
忘記是哪一本...有心的人就去查查看吧~
Tweening可以分為call-based和velocity-based
call-based就是一般很習慣就寫出來的那種tween
<AS3>
addEventListener(Event.ENTER_FRAME, move);
function move(e:Event):void {
mc.x += 10;
}
<AS2>
mc.onEnterFrame = function():Void {
this._x += 10;
}
很直覺,但是也有先前大家提到的缺點
每呼叫一次function就會讓mc往右邊移動10單位
但是如果有一次呼叫跟上次間隔 t 秒
然後下一次又跟這次間隔 1.5t 秒
於是就有第二次移動比第一次慢了一些的感覺
(也就是移動速率不保持固定)
至於velocity-based tweening
使用起來是比較準確,但是相對的就麻煩了一些
顧名思義,這個方法就是要考慮時間間隔與速率大小
如果某次的function呼叫晚了一點點
那麼移動量就會因為時間間隔較大而增加一點點
這樣給人的感覺就是物體的移動速度維持一定
假如我要讓一個mc每秒移動10單位
那麼velocity-based的code應該會長得像這樣
<AS3>
var velocity:Number = 10;
var justNow:Number = getTimer();
addEventListener(Event.ENTER_FRAME, move);
function move(e:Event):void {
var now:Number = getTimer();
mc.x += veloctiy * (now - justNow) / 1000;
justNow = now;
}
<AS2>
var velocity:Number = 10;
var oldTime:Number = getTimer();
mc.onEnterFrame = function():Void {
var now:Number = getTimer();
this._x += velocity * (now - oldTime) / 1000;
justNow = now;
}
我個人建議是
如果你沒有很龜毛,希望tweening非常準確
或者你的project並不需要超級準確的tweening效果
還是用比較簡單的call-based tweening吧
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凱特 = 蜚蠊貓 = 蟑螂貓
Blog
http://cjcat.blogspot.com
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比閃光(Adobe Flash)研討區
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.56.252
推 kannushilink:可是做音樂遊戲的timer就得很準要不然會被罵死= =" 04/29 23:51
→ cjcat2266:一般Flash做音樂遊戲應該是用stream去對節拍 04/29 23:52
→ cjcat2266:跟Timer準不準比較沒關係 04/29 23:53
→ cjcat2266:至於其他平台的音樂遊戲...我就不清楚了 04/29 23:53
推 kannushilink:stream? 那不是只有在影格的聲音撥放格式才能用? @@" 04/29 23:53
→ cjcat2266:就是那個 04/29 23:55
→ kannushilink:我指的是Flash,因為最近為了計時不準的問題而傷腦筋 04/29 23:54