匯出元件庫元件給 ActionScript 使用

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

依據預設,在 Flash 文件之元件庫中的影片片段元件實體無法以動態方式建立 (亦即,僅能使用 ActionScript 來建立)。這是因為要匯出在 ActionScript 中使用的每一個元件都會增加 SWF 檔的大小,而且已知有些元件可能不會用於舞台上。因此,為了讓某個元件可在 ActionScript 中使用,您必須指定應該將該元件匯出給 ActionScript 使用。

匯出元件給 ActionScript 使用:

  1. 在「元件庫」面板中選取元件,然後開啟其「元件屬性」對話方塊。

  2. 若有需要,請啟動「進階」設定。

  3. 在「連結」區段中,啟動「匯出給 ActionScript 使用」核取方塊。

    這麼做將會啟動「類別」和「基底類別」欄位。

    根據預設,會將移除空格的元件名稱填入「類別」欄位 (例如,名稱為「Tree House」的元件會變成「TreeHouse」)。若要指定元件應該為其行為使用自訂類別,請輸入類別的完整名稱,包括它在這個欄位中的套件。如果您想要在 ActionScript 中能夠建立元件的實體,但是不需要加入任何其它行為,則可以保留原來的類別名稱。

    「基底類別」欄位的值預設為 flash.display.MovieClip 。如果您希望元件能擴充另一個客戶類別的功能,只要該類別會擴充 Sprite (或 MovieClip) 類別,您就可以改指定該類別的名稱。

  4. 按「確定」按鈕儲存變更。

    此時,如果 Flash 找不到連結的 SWC 檔案或具有指定類別之定義的外部 ActionScript 檔案 (例如,如果您不需要為元件加入其他行為),就會顯示警告:

    「類別路徑中找不到這個類別的定義,將在匯出時自動產生至 SWF 檔」。

    如果您的元件庫元件需要的功能不會超出 MovieClip 類別提供的範圍,就可以忽略這個警告。

如果您沒有為元件提供類別,Flash 將會為元件建立一個與此類別相等的類別:

package 
{ 
    import flash.display.MovieClip; 
     
    public class ExampleMovieClip extends MovieClip 
    { 
        public function ExampleMovieClip() 
        { 
        } 
    } 
}

如果您希望在元件中加入額外的 ActionScript 功能,請在以下的程式碼結構內加入適當的屬性和方法。例如,假設您的影片片段元件包含寬度及高度都為 50 個像素的圓形,並且將元件指定為匯出給 ActionScript 並搭配名稱為 Circle 的類別使用。置入 Circle.as 檔案之後,下列程式碼就可以擴充 MovieClip 類別,並將額外的方法 getArea() getCircumference() 提供給元件:

package  
{ 
    import flash.display.MovieClip; 
     
    public class Circle extends MovieClip 
    { 
        public function Circle() 
        { 
        } 
         
        public function getArea():Number 
        { 
        // The formula is Pi times the radius squared. 
        return Math.PI * Math.pow((width / 2), 2); 
        } 
         
        public function getCircumference():Number 
        { 
        // The formula is Pi times the diameter. 
        return Math.PI * width; 
        } 
    } 
}

下列程式碼 (放置在 Flash 文件之「影格 1」的關鍵影格上) 將會建立元件實體,並將它顯示在螢幕上:

var c:Circle = new Circle(); 
addChild(c); 
trace(c.width); 
trace(c.height); 
trace(c.getArea()); 
trace(c.getCircumference());

這段程式碼會示範以 ActionScript 為架構的實體化,做為將個別資源拖曳到「舞台」的替代方案。它建立的圓形將具有影片片段的所有屬性,而且也有在 Circle 類別中定義的自訂方法。這是一個很基本的範例,您的元件庫元件可以在它的類別中指定任何數目的屬性和方法。

以 ActionScript 為架構的實體化具有強大的功能,因為它允許您以動態方式建立大量的實體,如果是以手動方式建立這些實體,則將是非常冗長而單調的作業。它同樣具備了很大的彈性,因為您可以在建立階段自訂每一個實體的屬性。當您使用迴圈以動態方式建立數個 Circle 實體時,就會明顯感覺到它帶來的好處。使用先前在 Flash 文件之元件庫中所描述的 Circle 元件與類別,將下列程式碼放在「影格 1」的關鍵影格上:

import flash.geom.ColorTransform; 
 
var totalCircles:uint = 10; 
var i:uint; 
for (i = 0; i < totalCircles; i++) 
{ 
    // Create a new Circle instance. 
    var c:Circle = new Circle(); 
    // Place the new Circle at an x coordinate that will space the circles 
    // evenly across the Stage. 
    c.x = (stage.stageWidth / totalCircles) * i; 
    // Place the Circle instance at the vertical center of the Stage. 
    c.y = stage.stageHeight / 2; 
    // Change the Circle instance to a random color 
    c.transform.colorTransform = getRandomColor(); 
    // Add the Circle instance to the current timeline. 
    addChild(c); 
} 
 
function getRandomColor():ColorTransform 
{ 
    // Generate random values for the red, green, and blue color channels. 
    var red:Number = (Math.random() * 512) - 255; 
    var green:Number = (Math.random() * 512) - 255; 
    var blue:Number = (Math.random() * 512) - 255; 
     
    // Create and return a ColorTransform object with the random colors. 
    return new ColorTransform(1, 1, 1, 1, red, green, blue, 0); 
}

這為您示範了如何使用程式碼快速建立和自訂某個元件的多個實體。每一個實體都會根據迴圈內目前的計數重新定位,並且設定其 transform 屬性 (Circle 會藉由擴充 MovieClip 類別的方式來繼承) 以賦予每一個實體一種隨機顏色。