基于AS3的时间线项目中的大规模效率问题

时间:2012-02-01 23:27:24

标签: flash actionscript-3

在此之前,这是令人讨厌的代码:

for (var i in yearMarkersArray) {
 yearMarkersArray[i].x = ((timelines.x + 350) % 140) + (140 * i) - 5;
 yearMarkersArray[i].text = "0";
}

这是主循环的一部分,只要用户向左或向右拖动缩小的时间轴(eventsArray中的精灵),就会触发该循环。 yearMarkersArray中的六个TLFText对象似乎向左或向右滚动用户,但实际上是重新定位并重新标记了正确的年份标记,由我上面没有包含的函数计算(它工作且与此问题无关,我只需更换为了清楚起见,它带有“0”。

文本设置语句是问题代码...我已经在主循环中对其他所有内容进行了评论以验证它。我甚至将语句更改为不涉及任何函数调用(只是将text属性设置为“0”),它仍然导致最终的.swf每15秒额外吃掉 1%的CPU 直到最后FPS在地板上坠毁。主循环的其余部分有很多,更复杂,我确信每个帧都运行低效的代码,我不知道为什么这一个语句会造成这么多麻烦。

由于这个项目读取的数据文件中包含我无法预测的时间轴事件列表,我确实需要以某种方式动态完成显示的年份标记。代码最终有效(我只注意到当我不小心让电影打开并闲置几分钟时出现了荒谬的减速),但我对Flash很新,如果可用的话,我会完全接受替代解决方案。提前感谢您的建议!

2 个答案:

答案 0 :(得分:1)

TLFText动态变化非常慢,应该只用于需要额外格式化的文本。动态经典文本是小型,多变领域的方法。

答案 1 :(得分:0)

  

这是主循环的一部分,只要用户拖动就会触发   缩小的时间表

您是在拖动开始时还是在拖动移动时调用此循环?

如果在拖动时移动那是你的问题