blog.Ring.idv.tw

從元件庫(Library)附加你的元件(一)-「attachMovie()」

從元件庫(Library)附加你的元件(一)-「attachMovie()」


「attachMovie()」-從字面上所表徵的意思,「attach」可以解釋為「貼上」或「附加」等意思,加上後面的「Movie」便知大意為「附加上你的影片片段」,也就是說,當我們想要從元件庫(Library)附加上「元件」時,即可利用這個方法來幫助我們達成。

剖析之前的預備動作

前置處理

在開始剖析之前,我們必須先做一些前置處理,這裡我們先利用「Rectangle Tool」等工具,在Stage上任意繪製形狀,並將此形狀轉成「MovieClip」元件,接著將此元件內的形狀刪除,意即為保留此「MovieClip」為「空」的狀態,以便容易剖析。

貼上元件的識別名稱(Identifier)

開啟元件庫,將剛剛所建立的元件給予它一個「識別名稱(Identifier)」,如此才能利用「attachMovie()」來達成動態附加元件庫中的元件,如圖所示:

簡單的驗證程式

最後在此元件內的Frame[1]寫入下述程式:

trace(this);

剖析「attachMovie()」的運用方式

根據ActionScript 2.0 Language Reference的說明,在開始運用「attachMovie()」之前,我們來觀察一下必須運用的參數有哪些?

Parameters

id:String — 對應元件庫中的識別名稱。

name:String — 給予它一個「實體名稱(instance name)」。

depth:Number — 深度值,可參考「Layer」、「Level」和「Depth」之間的三角關係(四)

initObject:Object (optional) — 在Flash Player 6之後才被支援的參數,可用來初始化此實體的一些屬性。

了解上述參數的意義為何之後,我們直接寫個簡單的測試程式(如下所示),將剛剛前置作業所準備的元件來加以運用:

_root.attachMovie("rect","rect_mc",1);

結果:

_level0.rect_mc

從結果中就可以知道,原本必須在「Properties Panel」中才能設定的「實體名稱」,現在則利用「attachMovie()」便可直接來作設定了,那Flash Player是如何達成這樣的動態處理呢?

剖析深藏在元件庫(Library)中的元件

我們將剖析上述程式的bytecode,來觀察Flash Player所發佈「swf」的檔案結構,來觀看一下端倪之處。

在藍色區塊的部份是屬於「rect」元件的bytecode,而紅色區塊部份則是利用「ExportAssets」這個「Control Tag」來描述「rect」元件的「識別名稱(Identifier)」,也就是說,只要當我們設定好處於元件庫中的元件「識別名稱」,並且在發佈成「SWF」檔案之後,此檔案便內含了描述此元件的「識別名稱」,進而達成動態地從元件庫中來控制特定元件。

初探「attachMovie()」的「initObject」參數

最後我們來玩玩在Flash Player 6之後才被支援的參數「initObject」,然而在開始之前我們先來想像一個情境,當我們在呼叫「attachMovie()」之後,我們想要讓此元件固定在某特定的座標位置上,那該如何處理呢?

基本上有兩種做法,一種是直接利用「initObject」參數,另一種則是採用「實體名稱」的方式來加以控制,但相對來說,第一種的做法較有執行優先權的優勢:

利用「initObject」參數

var obj = new Object();
obj._x = 50;
obj._y = 50;
_root.attachMovie("rect","rect_mc",_root.getNextHighestDepth(),obj);

採用「實體名稱」的方式

_root.attachMovie("rect","rect_mc",_root.getNextHighestDepth());
rect_mc._x = 50;
rect_mc._y = 50;

範例下載

本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。

2007-07-09 17:42:44

2 comments on "從元件庫(Library)附加你的元件(一)-「attachMovie()」"

  1. 1. 宗諺 說:

    清楚了~
    但是對於學長每次PO的那些像是機械碼的東東 還是只能意會卻看不懂.

    2007-07-10 15:00:20

  2. 2. Shen 說:

    你可以簡單的想像一下~
    當我們用Flash做好一個動畫或互動程式時,並將它發佈成「swf」之後,剩下的就交給Flash Player去幫我們執行「swf」檔案結構中的bytecode,而這些bytecode必須配合著Flash(SWF) File Format Specification才能夠看得懂~
    有興趣的話,你可以去官方網站下載它的規格書來看~
    遲些時候我也會寫個如何剖析「swf」檔案結構的文章~
    你蠻認真的哦~

    2007-07-10 15:44:17

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment