正在加载...

setInterval VS onEnterFrame
[抱歉,把setInterval 写成了updateAfterEvents]
这段时间真的累坏了

上面是setInterval,下面是onEnterFrame
跟配置貌似有很大关系……

代码

// Flash‘s FPS is set at 25!!!
  var f:Function = function () {
  _root.a_mc._x+=2;
  trace("a:"+_root.a_mc._x+" by setInterval");
  trace("b:"+_root.b_mc._x+" by setInterval");
};
var intervalid = setInterval(f, 1000/25);
onEnterFrame = function () {
  _root.b_mc._x+=2;
  updateAfterEvent();
  trace("a:"+_root.a_mc._x+" by onEnterFrame");
  trace("b:"+_root.b_mc._x+" by onEnterFrame");
};

现象
onEnterFrame 不配合 updateAfterEvent
速度略高于setInterval,且流畅度较好
onEnterFrame 配合 updateAfterEvent
速度明显高于setInterval,且流畅度较好
单独使用onEnterFrame ,CPU占用80左右
单独使用setInterval,CPU占用70不到

分析:
setInterval按照时间间隔调用函数,而函数再控制MC,这样效率就低下了。
而onEnterFrame直接对MC进行操作,效率较高。
但是onEnterFrame更耗资源(CPU)
有得必有失?

不知道各位测试结果如何,有些人喜欢setInterval,有些人则热衷于onEnterFrame(比如SSO)但是我却想弄清楚这两者之间到底有什么联系和差异,以及性能的特点,这样可以在不同的场合使用相对应的最佳方法,以确定到底是用setInterval还是onEnterFrame,找到最好的解决方案。

圈内朋友的讨论:

引用自 James.li at www.Flashsun.com/club
个人的愚见:
setinterval和onenterframe
两者的联系:都是频繁运动的事件。
两者的区别:setinterval是自定义时间间隔,而onenterframe的时间间隔与帧率成反比;setinterval只有通过对intervalid的clearinterval方法才能实现移除,而onenterframe是一个movieclip类的方法,可以通过delete或者直接清除其this主体来实现移除。

setinterval的优点在于不受帧率的影响,做出的效果很流畅;不受mc的影响,可以自由定义;可以随意控制interval的大小,方便做延时。缺点在于不易进行跟踪控制,容易造成内存垃圾,反而影响效率。

onterframe的优点在于移除方便,函数体内对mc的定位比较清晰,不用构造形参。缺点在于频繁调用没有setinterval流畅。

startDrag的效果很不流畅。
建议用onMouseDown、onMouseMove、onMouseUp这三个函数的结合来取代。

还没找到您要的东西?Google试试看吧,
Google更注重原创、时效性好的文章:


本文相关评论: 才 7 条评论
  1. kakera 2005-07-25 08:28:40

    onEnterFrame是在某帧结束之后才执行的. 如
    trace("out");
    onEnterFrame = function():Void {
    trace("in");
    delete this.onEnterFrame
    }
    先出out再出in

    而且, 偶感觉updateAfterEvent用在onEnterFrame里有点多余, 因为他本来就是按照帧频执行的, 自然就刷新了, setInterval如果间隔小于帧频才用他, 其他的没什么.. 在偶的本本上(迅2, 1.6G, 512M, 双通道), 他们的速度是一样的, 区别只是setInterval在他前面1点..

    而在偶那古董机(初代P4, 1.6G, 384M)上setInterval要慢N多.. -_-|| 莫名了.

    至于两者的选择, 偶一般是能用onEnterFrame就enterFrame了, 其他还是setInterval吧

  2. aw 2005-07-26 08:21:01

    多谢Kakera参与讨论 ^__^

    updateAfterEvent肯定不是这么简单,我觉得肯定另有蹊跷,至少很多动画用了它后变得非常smooth,但是我不清楚这样会不会改变具体的速度……

  3. FlankerMX 2005-07-29 09:29:05

    用我的机子看来,也是onEnterFrame快很多…
    不过我的机子配置比较差,可能更能反应出差别,

    fps是25,setInterval又刚好是40ms,这样用updateAfterEvent()t坦白说没什么意义,setinterval在间隔频率比fps大的情况下才是有用的,,去掉updateAfterEvent()估计还好一点,因为这种临界下的调用,真是很折磨电脑…

  4. Andrew 2007-04-03 05:18:37

    汗~~~在我的blog做你的as广告~~

  5. aw 2007-04-03 06:52:04

    -。-学术广告。

  6. lastsecond 2008-03-04 10:06:56

    在我看来中国人更喜欢用onEnterFrame, 而老外则是setInterval, why?

[支持Ctrl+Enter]为了我们大家和家人的安全,留言请慎重!
声明:
1、本站仅与见过面的个人博客交换链接,见此文
2、留言时的头像是Gravatar提供的服务。如果您有兴趣并且有闲暇时间,可以看看这里的介绍