Re: [實驗] 準時的 Timer

看板Flash作者 (CJ Cat)時間18年前 (2008/04/29 23:23), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串3/3 (看更多)
這個主題在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

04/29 23:51, , 1F
可是做音樂遊戲的timer就得很準要不然會被罵死= ="
04/29 23:51, 1F

04/29 23:52, , 2F
一般Flash做音樂遊戲應該是用stream去對節拍
04/29 23:52, 2F

04/29 23:53, , 3F
跟Timer準不準比較沒關係
04/29 23:53, 3F

04/29 23:53, , 4F
至於其他平台的音樂遊戲...我就不清楚了
04/29 23:53, 4F

04/29 23:53, , 5F
stream? 那不是只有在影格的聲音撥放格式才能用? @@"
04/29 23:53, 5F

04/29 23:55, , 6F
就是那個
04/29 23:55, 6F

04/29 23:54, , 7F
我指的是Flash,因為最近為了計時不準的問題而傷腦筋
04/29 23:54, 7F
文章代碼(AID): #185psC_t (Flash)
文章代碼(AID): #185psC_t (Flash)