以下动画策略在操作形状时在AS3中变得非常不稳定。
setInterval(function():void {
shape.x += 3;
},15);
我是Flash的新手,我知道语言中内置了不同的动画机制,我可以轻松学习,但我只是想知道为什么这个特定的策略动画效果如此糟糕。
我使用完全相同的技术在完全相同的机器上使用JavaScript平滑地动画HTML元素。 AS3和JS是否从根本上区别对待setInterval循环,导致一个比另一个更有效?
答案 0 :(得分:0)
Actionscript / Flex在帧上执行。框架上只能做很多事情。当执行的指令数超过帧的“可用时间”时,应用程序变得缓慢且不连贯 - 这会阻止UI更新,因为帧中的其他指令仍在运行。此外,这种类型的操作很昂贵 - 对象需要每15ms分配一次(内存分配很昂贵+垃圾收集器成本),你应该使用Timer对象。
或者,您可以在topLevelApplication上侦听输入框架和退出框架事件以创建一个聪明的事件循环,但像GreenThreads这样的东西已经做得很好。
此外,setInterval是JavaScript中的浏览器实现(它不是JavaScript语言的一部分,但所有浏览器都实现了它)。 Flex为setInterval使用Timer对象的变体。