啟動 Animate 並建立文件。
建立用於行動裝置的 Animate 內容
若要建立行動裝置的 Animate 內容,請遵守一些基本原則。 例如,Animate 開發人員常會避免極為複雜的圖稿和過度使用補間動畫或是透明度等。
Flash Lite開發人員面臨其他挑戰,因為行動裝置上的效能差異很大。 如果內容必須發佈到許多不同的裝置上,開發者有時不得不為最小公分來進行創作。
最佳化移動內容需要權衡利弊。 例如,一種技術可能會使內容看起來更好,而另一種技術則會產生更好的效能。 評估這些權衡之後,您會在模擬器測試與目標裝置測試之間反複來回回回切換。 您必須在實際裝置上檢視內容,才能評估色彩、文字可讀性、實體互動、UI回應等實際行動體驗的真實性。
關於 Flash Lite 的內容不適用於 Flash CC 及更新版本。
行動裝置動畫的 Flash Lite 準則
在建立行動裝置的動畫內容時,請記住裝置的 CPU 限制。 遵守這些準則有助於防止 Flash Lite 內容的執行速度緩慢:
在建立新的 Flash Lite 檔案時,請檢查文件是否正確設定。 雖然 Animate 檔案可以平滑地縮放,但是如果檔案不是以其原生舞台大小執行而必須在播放器中縮放,則效能可能會受到影響。 請嘗試將文件的舞台大小設定為符合目標裝置的解析度。 同時將 Flash Player 設定為正確的 Flash Lite 版本。
Flash Lite可以呈現低、中、高品質的向量圖形。 彩現品質越高,Flash Lite彩現向量圖形越平滑準確,對裝置CPU的需求也越大。 為了提供複雜的動畫,請試著改變玩家的品質設定,然後徹底測試SWF檔案。 若要控制SWF檔案的轉譯品質,請使用_quality屬性或SetQuality命令。 _quality屬性的有效值為低、中和高。
限制同時補間動畫的數目。 減少補間動畫的數目,或排序動畫,使一個動畫在另一個動畫結束時開始。
在符號上少用透明度(Alpha)效果,因為它們是CPU密集型。 特別要避免使用不是完全不透明的Alpha層級(小於100%)來補間動畫符號。
避免耗用過多 CPU 的視覺效果,例如大型遮色片、過多的動態、Alpha 混合作業、大量的漸層和複雜的向量等。
嘗試補間動畫、關鍵影格動畫和 ActionScript 驅動的動作等組合,以產生最有效的結果。
渲染向量橢圓和圓比渲染四邊形要耗費更多的記憶體。 使用圓形和橢圓形筆畫也會大幅增加CPU使用量。
經常在實際目標裝置上測試動畫。
Animate 在繪製動畫區域時,會在區域周圍定義矩形的邊界方框。 請盡可能縮小該矩形以最佳化繪圖。 另外請避免重疊的補間動畫,因為 Animate 會將合併的區域解譯為單一矩形,而使整體區域較大。 請使用 Animate 的「顯示重繪區域」功能來最佳化動畫。
避免使用 _alpha = 0 和 _visible = false 隱藏螢幕上的影片片段。 如果只是關閉影片片段的可見度或將其 Alpha 變更為零,則該影片片段仍會包含在線條演算計算中,因而可能對效能造成影響。
同樣地,請勿藉由將影片片段遮在另一個圖稿後方來隱藏影片片段, 因為該影片片段仍會納入播放器的計算中。 應該將影片片段整個移到舞台之外,或藉由呼叫 removeMovieClip 移除影片片段。
行動裝置中的 Flash Lite 點陣和向量圖形
Flash Lite 可以演算向量和點陣圖形。 每一種圖形都有其優缺點。 是否要使用向量而非點陣圖形,並非總是那麼容易決定,而且經常取決於幾個要素。
向量圖形是在 SWF 檔案中以數學方程式精簡地表示,並在執行階段由 Flash Lite 播放器進行演算。 相反地,點陣圖形是以圖片元素 (像素) 的陣列來表示,這種方式需要較多的資料位元組。 因此,在檔案中使用向量圖形有助於降低檔案的大小和記憶體的使用量。
在縮放大小時,向量圖形也可以維持其平滑形狀, 點陣圖影像則會變得稜角分明,或者可以清楚看到每個像素。
與點陣圖相較,向量圖形在演算時需要進行較高的處理能力,特別是有許多複雜形狀和填色的向量圖形。 所以,大量使用向量圖形有時可能會降低檔案整體的效能。 由於點陣圖形在演算時,所需的處理時間會比向量圖形來得少,所以對於某些檔案 (例如,要在行動電話上進行動畫顯示並捲動的複雜道路地圖) 而言是較佳的選擇。
請記住以下的注意事項:
避免在向量形狀上使用外框。 輪廓有內邊和外邊(填色只有一個邊),並且是要渲染工作的兩倍。
轉角比曲線更易於渲染。 如果可能,請使用平坦的邊緣,特別是使用非常小的向量形狀。
對於像圖示這樣的小向量形狀,最佳化特別有用。 複雜的圖示在轉譯時可能會遺失其詳細資訊,而轉譯詳細資訊的工作將會被浪費。
一般而言,請將點陣圖應用於小而複雜的影像 (例如圖示),而將向量圖形應用於較大且較為簡單的影像。
以正確大小匯入點陣圖形;不要匯入大圖形,然後在 Animate 中縮小,因為這會浪費檔案空間和執行階段的記憶體。
Flash Lite播放程式不支援點陣圖平滑。 如果點陣圖被縮放或旋轉,其外觀會變得粗糙。 如果需要縮放或旋轉圖形,請考慮改用向量圖形。
文字本質上就是一個非常複雜的向量形狀。 當然,文字往往很關鍵,所以很難完全避免。 當需要文字時,請避免將其製成動畫或置於動畫上。 請考慮使用文字作為點陣圖。 對於多行動態和輸入文字,不會快取文字字串的換行符號。 Animate 會在執行階段進行分行,並在每次需要重繪文字欄位時,重新計算分行。 靜態文字欄位沒有問題,因為行中斷是在編譯時預先計算的。 對於動態內容,使用動態文本欄位是不可避免的,但是如果可能,請考慮改用靜態文本欄位。
盡可能減少 PNG 檔案中的透明度使用;即使對於點陣圖的透明部分,Animate 都必須計算重繪。 例如,對於代表前景元素的透明PNG檔案,請勿以熒幕全尺寸匯出透明PNG。 而是以前景元素的實際大小匯出。
嘗試將點陣圖圖層與向量圖層組合在一起。 Animate 需要針對點陣圖和向量圖內容執行不同的演算程式,而在演算程式之間切換很花時間。
針對行動裝置設定 Flash Lite 點陣圖的壓縮
在使用點陣圖時,可以設定影像壓縮選項以縮減 SWF 檔案大小 (依各個影像進行,或針對所有點陣圖影像統一進行)。
設定個別點陣圖檔案的壓縮選項
針對顏色或色調變化複雜的影像,例如相片或有漸層填色的影像,選取「相片 (JPEG)」選項。 這個選項會產生 JPEG 檔案。 選取「使用讀入的 JPEG 資料」核取方塊,使用為讀入的影像所指定的預設壓縮品質。 若要指定新的壓縮品質設定,取消選取「使用匯入的 JPEG 資料」,然後在「品質」文字方塊中輸入一個介於 1 和 100 之間的值。 較高的設定會產生較高品質的影像,但檔案也會較大,所以請依需求調整此值。
選取「不失真 (PNG/GIF)」選項,以用於形狀簡單且色彩不多的影像。 這個選項會使用不失真壓縮來進行影像的壓縮,這種方法不會放棄任何資料。
比較原始檔案大小和壓縮檔案大小,決定是否可以接受選取的壓縮設定。
設定所有點陣圖影像的壓縮
針對行動裝置最佳化 Flash Lite 影格
大多數支援 Flash Lite 的裝置會以每秒 15 到 20 個影格 (fps) 的速度播放內容。 幀速率可以低至6 fps。 在開發期間,請將檔案影格速率設定為接近目標裝置的播放速度。 這會顯示內容如何在效能有限的裝置上執行。 在發佈最終SWF檔案之前,請將文檔幀速率設定為至少20 fps或更高,以避免在裝置支援更高幀速率的情況下限制效能。
在使用 gotoAndPlay 時,請記住要先初始化目前的影格和要求的影格之間的每個影格,Animate 才能播放要求的影格。 如果這其中許多影格都包含不同的內容,則使用不同的影片片段要比使用時間軸的效能更高。
雖然將內容放在檔案開頭預載在案頭上是有意義的,但在行動裝置上預載可能會延遲檔案啟動。 請將內容置於整個檔案中,以在使用影片片段時加以初始化。
針對行動裝置的 Flash Lite 內容最佳化 ActionScript
因為大多數行動裝置的處理速度和記憶體都受到限制,所以在開發用於行動裝置的 Flash Lite 內容 ActionScript 時,請遵守以下準則:
檔案和其程式碼要盡可能保持簡單。 移除未使用的影片片段、刪除不必要的影格和程式碼迴圈,並且避免過多的影格或外部影格。
使用FOR回圈可能會很昂貴,因為每次反複檢查條件時都會產生額外負荷。 當反複運算的成本與回圈開銷相若時,請個別執行多個作業,而不是使用回圈。 程式碼可能會更長,但效能會改善。
一旦不再需要影格架構的迴圈,就加以停止。
在可能的情況下避免字串和陣列處理,因為這些作業可能很耗費 CPU。
永遠試著直接存取屬性,而不要使用 ActionScript 的 getter 和 setter 方法,這兩種方法比其他的方法呼叫還需要耗費更多資源。
明智地管理事件。 使用條件檢查偵聽程式是否存在(不是null),在呼叫偵聽程式之前,讓事件偵聽程式陣列保持緊湊。 使用unloadapplication或removeapplicationClip移除內容之前,請先呼叫clearInterval清除任何使用中間隔,再呼叫removeListener移除任何使用中監聽器。 如果在取消載入影片片段時,有任何的 ActionScript 函數仍在參照 SWF 資料,則 Animate 不會回收 SWF 資料記憶體 (例如,從間隔和偵聽程式進行回收)。
當不再需要變數時,請刪除變數或將變數設定為null,這會標示它們為垃圾回收。 刪除變數有助於最佳化運行時記憶體的使用,因為不需要資產會從SWF檔案中刪除。 刪除變數比將它們設定為null更好。
在記憶體回收之前,呼叫 removeListener 以明確地從物件移除偵聽程式。
如果是以動態方式呼叫函數,且該函數會傳遞固定的參數集,請使用 call 而不要使用 apply。
使名稱空間(例如路徑)更緊湊,以減少啟動時間。 封裝中的每個層級都會編譯成IF陳述式,並產生新的Object 呼叫,因此路徑中的層級數更少可節省時間。 例如,具有層級com.xxx.yyy.aaa.bbb.ccc.functionName的路徑會導致物件為com.xxx.yyy.aaa.bbb.ccc具現化。 某些Flash開發人員使用前處理器軟體,在編譯SWF程式碼之前,減少唯一識別碼(例如58923409876.functionName)的路徑。
如果檔案包含使用相同SWF類別的多個ActionScript檔案,請在編譯期間從選取的SWF檔案中排除這些類別。 這樣有助於減少檔案下載時間和運行時記憶體需求。
避免使用 Object.watch 和 Object.unwatch,因為對物件屬性的每項變更都需要播放器判斷是否必須傳送變更通知。
如果在時間軸關鍵影格上執行的 ActionScript 程式碼需要 1 秒以上才能完成,請考慮分割該程式碼,以在多個關鍵影格上執行。
發佈SWF檔案時,從程式碼移除trace陳述式。 若要執行此操作,請選中「Publish設定」對話方塊中「Flash」頁籤上的「省略跟蹤操作」覈取方塊。
繼承會增加方法呼叫的數目,並使用更多記憶體:一個類別包含所需的所有功能,在運行時比一個從超類別繼承其部分功能的類別更有效率。 因此,可能需要在類的可擴充性和代碼的效率之間進行設計權衡。
當一個SWF檔案載入另一個包含自定義SWF類(例如foo.bar.CustomClass)的ActionScript檔案,然後解除安裝該SWF檔案時,類定義會保留在記憶體中。 若要儲存記憶體,請明確刪除未載入SWF檔案中的任何自訂類別。 使用delete陳述式並指定完整類別名稱,例如: delete foo.bar.CustomClass.
限制全域變數的使用,因為這種變數不會在定義它們的影片片段遭到移除後,標示為由記憶體回收。
避免使用標準使用者介面元件(在Flash的「元件」面板中提供)。 這些元件是設計成在桌上型電腦上執行,並未最佳化成在行動裝置上執行。
在可能的情況下,避免將函數過度巢狀化。
避免參照不存在的變數、物件或函式。 與案頭版的Flash Player相比,Flash Lite 2會緩慢查詢不存在的變數的參考,這可能會顯著影響效能。
避免使用匿名語法定義函式。 例如,myObj.eventName =函式{ ...}。 明確定義的函式更有效率,例如函式myFunc { ...}; my Obj.eventName = myFunc;。
盡可能減少 Math 函數和浮點數的使用。 計算這些值會降低效能。 如果必須使用Math常式,請考慮預先計算值並將它們儲存在變數陣列中。 從資料表中擷取值比讓Flash在執行階段計算值快得多。
管理行動裝置的 Flash Lite 檔案記憶體
Flash Lite 會定期從記憶體清除檔案不再參照的任何物件和變數。 這稱為記憶體回收。 Flash Lite 會每隔 60 秒或是在檔案記憶體使用量突然增加 20% 或以上時,執行記憶體回收程序。
雖然無法控制 Flash Lite 執行記憶體回收的方法和時機,您仍然可以刻意釋放不需要的記憶體。 對於時間軸或全域變數,使用 delete 陳述式以釋放 ActionScript 物件所使用的記憶體。 對於區域變數 (例如,在函數定義中定義的變數),無法使用 delete 陳述式來釋放物件的記憶體,但可以將參照物件的變數設定為 null。 只要該物件沒有其他參照,這樣就能釋放物件所使用的記憶體。
下列兩個程式碼範例顯示如何刪除參照物件的變數,以釋放這些物件所使用的記憶體。 這些範例完全相同,只是第一個範例會建立時間軸變數,而第二個範例則會建立全域變數。
//大寫:附加至影片或
的變數
//影片片段時間表
//
//建立Date物件。
var mcDateObject = new Date();
//以字串形式傳回目前的日期。
trace(mcDateObject);
//刪除物件。
刪除mcDateObject;
//傳回undefined。
trace(mcDateObject);
//
//第二個大小寫:附加至影片或
的全域變數
//影片片段時間表
//
//建立Date物件。
_global.gDateObject = new Date();
//以字串形式傳回目前的日期。
trace(_global.gDateObject);
//刪除物件。
刪除_global.gDateObject;
//傳回undefined。
trace(_global.gDateObject);
如前所述,您無法使用 delete 陳述式來釋放區域函數變數所使用的記憶體, 請改為將變數參考設定為null,其效果與使用delete.
相同
函式func()
{
//建立Date物件。
var funcDateObject = new Date();
//以字串形式傳回目前的日期。
trace(funcDateObject);
//刪除無效。
刪除funcDateObject;
//仍會傳回目前的日期。
trace(funcDateObject);
//將物件參照設定為null。
funcDateObject = null;
//傳回null。
trace(funcDateObject);
}
//呼叫func()函式。
func();func();
在 Flash Lite 中載入行動裝置的資料
在開發行動裝置的檔案時,盡可能減少一次載入的資料量。 如果您正在將外部資料載入Flash Lite檔案(例如,使用XML.load),若為傳入資料配置的記憶體不足,裝置的作業系統可能會產生「記憶體失敗」錯誤。 即使剩餘記憶體的總量足夠,也可能發生這種情況。
例如,假設檔案嘗試載入 100 KB 的 XML 檔案,但裝置的作業系統只配置了 30 KB 來處理這個傳入資料串流。 在這種情況下,Flash Lite 會對使用者顯示錯誤訊息,指出沒有足夠的記憶體可用。
若要載入大量資料,請將資料群組成較小的片段(例如,在多個XML檔案中),並針對每個片段進行數個資料載入呼叫。 每個資料的大小以及需要進行的資料載入呼叫的次數因裝置和檔案而異。 若要判斷資料要求數目與記憶體失敗的可能性之間的適當平衡,請在各種目標裝置上測試檔案。
若要達到最佳效能,應盡可能避免載入和剖析 XML 檔案。 請改為以簡單名稱/值對儲存資料,並使用loadVars從文字檔或從預先編譯的SWF檔載入資料。
從 Flash Lite 編譯排除類別
若要減少 SWF 檔案的大小,請考慮從編譯排除類別,但保留在類別檢查時存取和使用類別的功能。 例如,如果要開發使用多個 SWF 檔案或共用元件庫的檔案,特別是存取許多相同類別的檔案時,請嘗試這項作業。 排除類別有助於避免在這些檔案中複製類別。
在XML檔案中放置下列標籤:
<excludeAssets>
<資產名稱="className1" />
<資產名稱="className2" />
</excludeAssets>
在 <asset> 標籤中所指定的名稱屬性值,是應該從 SWF 檔案排除的類別名稱。 盡可能為檔案加入所需的名稱。 例如,下列XML檔案會將mx.core.UIObject和mx.screens.Slide類別從SWF檔案中排除:
<excludeAssets>
<資產名稱="mx.core.UIObject" />
<資產名稱="mx.screens.Slide" />
</excludeAssets>