東藏西躲的ActionScript
在ActionScript 2.0的程式設計中,程式可以置放的位置十分的自由,只要是Layer上的Keyframe、Keyframe內的MovieClip、Keyframe內的Component、Keyframe內的Button以及各MovieClip/Component/Button裡面的子MovieClip/Component/Button的無窮迴圈,雖然置放的位置自由,但也造就了程式碼的難以維護。每一段ActionScript的執行如果環環相扣的時候,某一個有錯誤可能要翻片散播各地的Code還不一定有線索,這也造就了跟一般程式語言平台不同的開發環境,程式碼的破碎程度不去控制的話會十分嚴重,而最後將造成系統維護跟更新上的困難。
Class!這個MovieClip就交給你了
程式碼的破碎問題,其實是可以去克服的,雖然Flash的ActionScript是可以讓程式碼散播在各地,但是也是有方法可以讓程式碼有系統的整理起來。這裡並不是要規定說程式碼一定要在哪邊寫,畢竟有些程式碼真的適合切成小項目去各自維護。例如該Button的字型跟其他元件不同要特別大一號,這時候只要在該Button的OnLoad事件直接設定就好,統一處理反而是自找麻煩。但是如果一些片段的程式碼可以合併成一個有系統或有意義的行為物件時,這時候合併成一個有意義的Class,不僅是方便程式的撰寫,也會提升此功能的再利用性。
單然,如果只是邏輯上的功能,早就交給SEPY去作函式庫的開發,而片段的程式碼通常是因為Event Control而產生的。因此並不是資料處理問題去撰寫Class,而是針對MovieClip/Button/Component的Event控制而撰寫Class,這時候撰寫的Class必須繼承自MovieClip,並且由Flash Editor設定該Class等同於特定MovieClip之後,該Class內就具備有存取被設定的MovieClip所有資源。
以應用程式(三)的時候,當初建立了一個TestClass,並且我們讓他繼承自MovieClip,此時將利用它當範例在繼續延伸。
在一個Flash的專案中,透過Create New Symbol建立新的MovieClip時,如果需要ActionScript可以動態生成此MovieClip時,都會設定該MovieClip的Identifier,這裡隨便取名為aaa。並且在Class的部分,我們將DataProvider.TestClass填上,表示此MovieClip的生成與運作將與DataProvider.TestClass一起動作。

我們將在此MovieClip上置放一個Text Field的文字方塊,並且將該文字方塊屬性調整為Dynamic,並且取名為TextBox1。首先在該TextBox1的預設文字顯示為AAAA,只要將名為aaaa的MovieClip拉到Flash Editor一開始的圖層內,可以預期出現下列的結果,在畫面中可以看到文字方塊的AAAA,並且從output window中可以看到"TestClass Create"的訊息,表示該Class同時也有建置出來。

確定Class連動之後,我們必須手動的將該MovieClip內的子元件(Movie/Component/Button)手動的在Class上命名該變數,變數的名稱必須跟Instance Name相同,而變數的類型也必須與該子元件的類型相同。以目前的範例來說,必須建立一個名為TextBox1,屬性為TextField的變數在TextClass之中。並且我們在TextClass中建立一個名為onLoad的function,這是MovieClip在整個生成完成之後會呼叫的function,在這裡進行UI的控制才不會發生圖形還沒產生但程式已經要求做變動,進而造成程式的要求都沒有反應。在onLoad的function中,將TextBox1.text修改成"BBBB"。

變動後運作的結果如下:

單然,如果只是邏輯上的功能,早就交給SEPY去作函式庫的開發,而片段的程式碼通常是因為Event Control而產生的。因此並不是資料處理問題去撰寫Class,而是針對MovieClip/Button/Component的Event控制而撰寫Class,這時候撰寫的Class必須繼承自MovieClip,並且由Flash Editor設定該Class等同於特定MovieClip之後,該Class內就具備有存取被設定的MovieClip所有資源。
以應用程式(三)的時候,當初建立了一個TestClass,並且我們讓他繼承自MovieClip,此時將利用它當範例在繼續延伸。
在一個Flash的專案中,透過Create New Symbol建立新的MovieClip時,如果需要ActionScript可以動態生成此MovieClip時,都會設定該MovieClip的Identifier,這裡隨便取名為aaa。並且在Class的部分,我們將DataProvider.TestClass填上,表示此MovieClip的生成與運作將與DataProvider.TestClass一起動作。
我們將在此MovieClip上置放一個Text Field的文字方塊,並且將該文字方塊屬性調整為Dynamic,並且取名為TextBox1。首先在該TextBox1的預設文字顯示為AAAA,只要將名為aaaa的MovieClip拉到Flash Editor一開始的圖層內,可以預期出現下列的結果,在畫面中可以看到文字方塊的AAAA,並且從output window中可以看到"TestClass Create"的訊息,表示該Class同時也有建置出來。
確定Class連動之後,我們必須手動的將該MovieClip內的子元件(Movie/Component/Button)手動的在Class上命名該變數,變數的名稱必須跟Instance Name相同,而變數的類型也必須與該子元件的類型相同。以目前的範例來說,必須建立一個名為TextBox1,屬性為TextField的變數在TextClass之中。並且我們在TextClass中建立一個名為onLoad的function,這是MovieClip在整個生成完成之後會呼叫的function,在這裡進行UI的控制才不會發生圖形還沒產生但程式已經要求做變動,進而造成程式的要求都沒有反應。在onLoad的function中,將TextBox1.text修改成"BBBB"。
變動後運作的結果如下:
沒有留言:
張貼留言