您可以將許多C++技能應用於您的AS3項目。
有很多技巧。很高興你提出了在主要時間表上放置代碼。我沒有在時間軸上放置代碼(這在AS2程序中很常見,而在AS3中可以完全避免),所以我建議將每個對象作爲一個單獨的類來考慮。例如,您正在使用鼠標點擊代碼的動畫片段可以是使用其自己的類創建的對象。說MovieClip是一個球的圖形。你應該創建一個擴展(繼承)MovieClip類一個「球」級,並在其處理的鼠標點擊事件:
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class myObjects.Ball extends MovieClip
{
public function Ball()
{
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
private function mouseDownHandler(event:MouseEvent):void
{
// Code
}
}
}
然後,找到你在圖書館窗格球的影片剪輯,右鍵單擊它,屬性,切換到高級模式,勾選導出爲AS。現在,請注意您的MovieClip已經將MovieClip類引用爲其基類了嗎?因爲你的Ball類擴展了MovieClip類,所以你不會再需要這個了。所以在Class字段中寫入'myObjects.Ball'並清除Base類字段。如果您編寫了Flash IDE可以找到的名稱空間Ball類的路徑,則應該看到一個綠色複選標記。
現在,您的Ball類將使用該MovieClip,因此當您在主類中創建Ball的新實例時,可以使用它作爲MovieClip並動態地將其附加到舞臺上。或者,您可以通過在該處手動拖動Ball MovieClip將其添加到時間線中。
擴展我解釋的類是AS3的'繼承'版本(Ball類繼承MovieClip類)。你也可以使用其他的OO概念,如polymorphism和封裝。儘可能將代碼封裝到單獨的類中。假設您的項目中有幾種不同類型的球形動畫片段,並且您希望球形課程成爲足球,球形球和棒球的父級。每個孩子課程都可以擴展Ball類。我發現對於大型項目有用的另一件事是創建一個靜態類來處理我的應用程序的所有事件。因爲我將它定義爲public static class
,所以我可以將它導入到每個類中,並且只在應用程序的持續時間內爲其創建一次變量。這可能非常有用。
我也在類中創建了自己的僞析構函數,以便像使用C++一樣使用AS3。最簡單的方法是在銷燬對象的實例之前調用僞析構函數。我確實是在一個應用程序中自動實現的,所以如果我感興趣的人可以追蹤代碼......但AS3處理幕後的垃圾回收,通常不需要析構函數,但也許我只是認爲它不是必需的,因爲我在AS3編程中養成了很長時間的壞習慣。個人而言,我認爲你越努力在AS3中開發應用程序就好像你正在用C++開發一樣,獲得的樂趣越多,代碼的可重用性越高。保持它..很快,而不是一堆代碼,你會有一堆動作文件大聲笑..一把雙刃劍,但whatevs一點點。
+1答案。我認爲要記住的主要事情(考慮OP來自C++)是時間線代碼可能是非常不可預測的,應該是(極少數例外)不惜一切代價避免。使用as3中的所有面向對象功能,它也是不必要的。 – Bosworth99 2011-06-09 14:53:35
對。我認爲,當我第一次進入AS時,我形成了一些不好的習慣......並且因爲他們得到了我的結果而陷入了困境。但是,是時候以正確的方式做事了。 – 2011-06-09 15:01:38
絕對。 Flash IDE中的時間線編碼是貧民窟,應該用適當的類文件替換。此外,您還應該使用較細的Sprite對象而不是MovieClip對象。 – TheDarkIn1978 2011-06-10 04:52:02