Mac与Windows中的Flash AS3动画

时间:2010-01-12 15:24:08

标签: windows flash actionscript-3 macos animation

我正在制作一个简短的动画故事,它有一个可擦洗的时间表和章节标题。我使用TimelineMax对它进行排序。在大多数情况下,它工作正常。我看到一些奇怪的行为弹出,但:精灵消失,功能停止响应用户输入,精灵的接缝变得透明 - 所有小问题但很难确定,因为它们只发生在Mac上。

所以我想知道Flash有什么问题,以及为什么它在Mac上行为不端?

2 个答案:

答案 0 :(得分:2)

我经常在Windows上工作相同的项目,然后在家里使用我的Mac。我也看到Mac与Windows相比有些不同。我发现Mac的各种Flash Player版本通常比Windows播放器慢,而且我在Mac上看到了一些在Windows上没有发生的奇怪行为。

在大多数情况下,我已将其缩小到AS3的垃圾收集范围。当玩家确定某个对象在影片中不再有引用时,就会发生垃圾收集,因此它会删除该对象以释放内存。假设您有类似的类方法:

function myTweenFunction():void {
    var myTween:Tween = new Tween(myDisplayObject, 'x', Strong.easeInOut, 0, 500, 10, true);
    myTween.addEventListener(TweenEvent.MOTION_FINISH, onMyTweenDone);
}

上述方法将在10秒内将myDisplayObject的x值从0添加到500。当补间完成后,它应该触发onMyTweenDone方法(未显示)。但是,myTween是在myTweenFunction中创建的,因此它只存在于myTweenFunction的范围内。当myTweenFunction完成后,myTween对象不再被电影中的任何对象引用,因此它成为垃圾收集的候选对象。您将开始看到补间,但在某些时候它会在达到500之前停止并且终止事件不会触发。这意味着myTween已被销毁。要解决这个问题,myTween需要是类的成员,或者只需要在类函数之外有一个引用。

回到Mac与Windows的问题,我发现在Mac上运行时创建的对象上的垃圾收集比在Windows上更明显。垃圾收集发生在Windows Flash Player中,但补丁和其他事件可能在垃圾收集发生之前完成,因为Windows Flash Player具有更好的性能。如果Mac Flash Player速度较慢(即相同的补间可能需要更长时间),则垃圾收集可能会在补间完成之前发生。垃圾收集不像动画一样逐帧发生;这是一个可以随时发生的后台进程,或者如果Flash Player有足够的内存则根本不进行。你的Windows机器可能有一堆RAM,电影可以很好地播放而不需要垃圾收集,所以myTween可能永远不会消失。如果您的Mac内存较少,或者您一次打开大量应用程序并且Flash Player内存分配有限,则Flash Player将更频繁地执行垃圾收集。

我还使用了TimelineMax,并且默认启用了自动垃圾收集功能。尝试将其关闭并在Mac上进行测试。

最终,您应该假设用户可能拥有非常有限的内存来设计您的项目,因此需要相应地创建,引用和垃圾收集您的对象。

答案 1 :(得分:0)

我在插件版本之间遇到了一些渲染问题,尤其是在处理透明度,字体和嵌入设置时。

如果您在网络浏览器中执行此操作,请尝试使用WMODE嵌入设置,并查看结果是否发生变化。