在 AS3 中使用元件庫中的元件

ActionScript

在 AS3 中使用元件庫中的元件。

方法1:使用SWC

.fla(MovieClip) + .as => .swc -> {FlashDevelop}/lib

在Flash IDE中

設計了一個MovieClip(影片片段)放在Library(元件庫)中,在它上面按右鍵,選擇"屬性",勾選"匯出給ActionScript使用"。

如果你有自定的類別(.as)則指定,若沒有,Flash IDE會自動給一個空的類別。完成後,在元件庫中該元件上按右鍵,選擇"匯出SWC檔案",存到你的FlashDevelop專案的/lib資料夾中。

在FlashDevelop中

在/lib資料夾中會看到剛才存進來的swc檔,在它上面按右鍵"Add to Library"。現在,你只要使用new就可以使用這個元件了。記得,你new的元件名稱不是swc的檔案名稱,而是當初在Flash IDE元件庫中"類別"欄位所填的名稱。建議類別名稱的首字大寫,例如:Rect,然發元件庫中的名稱(元件本身)也取一樣的名稱,匯出的SWC也取一樣的名稱,這樣日後才不會亂掉。

整理一下開發流程:

  1. Designer在.fla中設計元件,Programmer設計類別.as。
  2. Programmer將.as交給Designer,Designer在元件庫中對該元件指定類別,接著匯出.swc檔給Programmer。
  3. Programmer將.swc加入library,在程式碼中new該元件。

方法2:使用Embed

.fla => .swf -> {FlashDevelop} [Embed]

在Flash IDE中

一樣將元件庫中的元件,勾選"匯出給ActionScript使用",然後就發佈成.swf檔。

在FlashDevelop中

在class中,使用Embed。
[Embed(source = "library.swf", symbol = "Circle")]
private var Circle:Class;
source指向swf檔,symbol指定為"類別"名稱。注意!後面沒有分號

接著指定一個Class變數來指向symbol所指的類別。然後一樣使用new來建立物件。只是有個重點要注意,這個建立的物件的資料型態不是我們建立的Circle,而必須是Sprite或MovieClip。如下:
var circle:Sprite = new Circle();
如果Sprite換成Circle會發生編譯錯誤。如果是MovieClip則會有轉型錯誤。可是明明在.fla中我們指定的元件就是MovieClip,我猜是Flash IDE為了效能,自動轉換元件的型別,也就是說,如果是單個影格的元件,輸出時會轉成Sprite,多個影格的則使用MovieClip。所以你的元件如果是一段動畫(超過一個影格)的,就必須使用MovieClip資料型別。

相同的,如果要embed圖檔(png,jpg,gif),則資料型態就要用Bitmap,如下:
[Embed(source = "photo.jpg")]
private var Photo:Class;
---------------------------------------
var photo:Bitmap = new Photo();
addChild(photo);
範例:EmbeddingResources.rar

註:Embed不只可以嵌入swf檔,也可以嵌入jpg、png等圖檔,只寫source,symbol那段拿掉即可。

另外還有一個在FlashDevelop開發的小技巧,你可以使用下面這段程式碼來指定發佈的swf的格式,如下:
[SWF(backgroundColor="0x333333", width="320", height="480", frameRate="32")]
如同在Flash IDE中所做的設定。這行要寫在Import同一區。

還有一個就是指定中心點在左上角及不能被縮放。
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
本文網址:http://blog.tonycube.com/2010/01/as3.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。