2010-01-12 75 views
0

我正在制作一个简短的动画故事,它有一个可缩放的时间轴和章节标题。我使用TimelineMax进行排序。大多数情况下,它工作正常。虽然我看到一些奇怪的行为,但是:精灵消失,函数停止响应用户输入,精灵的接缝变得透明 - 所有小问题,但很难确定,因为它们仅在Mac中发生。Mac和Windows中的Flash AS3动画

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

回答

0

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

如果你是在网络浏览器中进行此操作,请尝试使用WMODE嵌入设置播放,看看你的结果是否改变。

2

我经常在Windows上工作,然后在家里使用我的Mac上的相同项目。与Windows相比,我也看到了Mac上的一些差异。我发现用于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); 
} 

上述方法,从0补间myDisplayObject的的x值500在10秒的时间。该补间完成后,它应该激发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上进行测试。

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