当Flex App无法以指定的帧速率运行时会发生什么?

时间:2008-09-24 10:04:59

标签: flex flash actionscript-3 performance

在我们的应用程序(游戏)中,在某些情况下它运行得不够快。显然我们想加快速度,但是在发生这种情况的时候它会导致许多问题(或者如果它不会导致它们,那么两者是相关的)。 与我们自己的功能最不相关的一个是内置的Alert.show()方法停止工作。通常会出现全屏透明框,但不会显示实际的弹出框。我认为这取决于Flex为其他任务提供所有可用的周期......但事实证明难以进行分析,所以我很高兴听到另一种解释。

澄清一下,Flex的核心部分根本不适用于这种情况。我已经逐步完成了代码,例如在屏幕上添加了一个新元素,一切都会发生,并且在主显示画布上调用addChild()方法......但是元素不会出现。如果我们再禁用更新循环,则会突然显示该元素。

因此,Flex是否应该运行完全相同的代码,不知何故,它是阻塞是一种奇怪的方式。正如我所说,即使Flex Alert.show()方法也不起作用。

3 个答案:

答案 0 :(得分:4)

所有Flash内容都是逐帧执行的 - Flash执行一帧代码,然后更新屏幕,然后等待下一帧更新。

当Flash无法跟上指定的帧速率时,所发生的一切就是不再在帧更新之间等待,Flash会尽可能快地完成,而不会在两者之间等待。所以唯一可见的区别是帧更新发生的频率较低。从来没有因为性能原因而跳过代码,删除事件或跳过屏幕重绘的情况(除非您发现了新的错误)。

因此,最可能的罪魁祸首是,您要么遇到与时间相关的代码问题(例如需要在同一帧上触发两个定时器的代码),或者其他一些被误诊的问题。 (例如,可能存在导致速度减慢的错误,而不是导致错误的减速。)

答案 1 :(得分:0)

我不太确定Flex是否有一些额外的性能处理方法。但是对于纯动作脚本来说,唯一会发生的事情就是帧速率会慢慢爬行,一切都会发生,通常只会慢一些。如果堆叠非常大量的透明或蒙版对象,可能会产生一些奇怪的行为,但这应该更加明显。

我想告诉你,在Flex中制作游戏并不是一个好主意(仅仅是因为框架的性能开销)有点晚了;)

答案 2 :(得分:0)

我喜欢在FLEX 3(actionscript3)中制作游戏,与Flash CS3相比,它实际上是非常方便的解决方案:良好的调试环境,没有麻烦。 当然这取决于哪个更好的游戏风格,如果你需要更多的图形,你可能更喜欢Flash,但Flex允许你使用外部图像,组件等。注意我不是在谈论Flex XML项目。< / p>

回答您的效果问题:您可以使用例如旧的MacOSX机器看看在一台非常慢的机器上会发生什么,一些解决方案是:   - 当机器老旧时,移动超过x ++ y ++像素的对象   - 减少对象

您可以使用计时器检测机器的速度有多慢..