2010-01-12 47 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上進行測試。

最終,您應該設計您的項目時假定用戶的內存可能非常有限,因此需要相應地創建,引用和垃圾收集。