2012-02-01 35 views
1

别的之前,这是问题的代码位:大规模的效率问题

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非常陌生,如果可用,我完全可以使用替代解决方案。在此先感谢您的建议!

+1

尝试使用“经典”TextField而不是TLFTextTextField,并将抗锯齿设置为“用于动画”。 – 2012-02-01 23:47:28

+0

我试图运行一个框架循环,将TextField的文本值设置为“0”,并观察内存占用和CPU使用情况 - 随着时间的推移没有增加。对我而言,这意味着你的程序可能还有其他问题,这些问题与文本更改相结合会导致问题。 – weltraumpirat 2012-02-02 00:20:01

+0

如果随着时间的推移CPU使用率增加,我猜测你有某种内存泄漏。当然,如果不看更多的代码,这是不可能的。 – weltraumpirat 2012-02-02 00:22:06

回答

1

TLFText是很慢的动态改变,并且真的应该只用于需要额外的格式化文本的拖动移动。动态经典文本是实现小型可变领域的方法。

0

这是主循环触发每当用户拖动 的缩小了的时间表

你打电话从牵引起动或拖举这个循环的一部分吗?

如果这是你的问题