看板 Flash 關於我們 聯絡資訊
這個主題在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