作者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
1F:推 kannushilink:可是做音乐游戏的timer就得很准要不然会被骂死= =" 04/29 23:51
2F:→ cjcat2266:一般Flash做音乐游戏应该是用stream去对节拍 04/29 23:52
3F:→ cjcat2266:跟Timer准不准比较没关系 04/29 23:53
4F:→ cjcat2266:至於其他平台的音乐游戏...我就不清楚了 04/29 23:53
5F:推 kannushilink:stream? 那不是只有在影格的声音拨放格式才能用? @@" 04/29 23:53
6F:→ cjcat2266:就是那个 04/29 23:55
7F:→ kannushilink:我指的是Flash,因为最近为了计时不准的问题而伤脑筋 04/29 23:54