2017-03-06 52 views
1

我正在使用actionscript3,由於我是自學成才的,我認爲自己已經開發了一些不良習慣,包括在時間軸上編碼和使用多個場景。使用文檔類在動作腳本中將fla文件鏈接在一起

我希望現在糾正這個問題,我正在研究一個更大的項目。

根據我讀過的內容,將多個.fla文件鏈接在一起是一種更好的做法,每種方法都有自己的文檔類。那是對的嗎?

如果是這樣,我如何加載一個與它的文檔類.fla,然後鏈接到隨後的.fla文件(而不是使用場景)?或者我誤解了推薦的內容?

謝謝!

+1

您是否嘗試閱讀互聯網上的教程?這裏有一個[**有用的指南**](https://code.tutsplus.com/tutorials/how-to-use-a-document-class-in-flash-active-3233)。你不使用多個FLA。一個FLA成爲您的應用的主要出發點。之後,您可以使用更多功能來「導入」其他AS文件。如果您在網絡FLa中有音頻/視頻內容,請將其編譯爲SWF。在您的主應用程序中,只需加載SWF即可訪問SWF自己的內容或自己的功能。 –

回答

1

有沒有點在幾個可加載模塊分割你的應用程序,除非你有任何以下先決條件:

  • 你有智能資源管理,如果你把所有的東西放到一個文件來加載和卸載內容
  • 它變得太大,很難在設計時間與工作或編譯

定期AS3替代使用場景是創建/銷燬內容實例中使用該主文件CL花費的時間太長了作爲他們的經理。您在庫中設計內容併爲它們創建行爲AS3類。比方說,你有兩個內容類A和B.在啓動管理器應該顯示他們中的一個,等待信號,顯示下一個:

private var APage:A; 
private var BPage:B; 

gotoA(); 

function gotoA():void 
{ 
    if (BPage) 
    { 
     BPage.destroy(); 
     removeChild(BPage); 
     BPage.removeEventListener(Event.CLOSE, gotoA); 
    } 

    APage = new A; 
    APage.addEventListener(Event.CLOSE, gotoB); 
    addChild(APage); 
} 

function gotoB():void 
{ 
    if (APage) 
    { 
     APage.destroy(); 
     removeChild(APage); 
     APage.removeEventListener(Event.CLOSE, gotoB); 
    } 

    BPage = new B; 
    BPage.addEventListener(Event.CLOSE, gotoA); 
    addChild(BPage); 
} 

因此,A和B都應該有相應的方法。 destroy()釋放使用的資源,取消訂閱事件的方法,移除顯示對象等等,並且它們都應該在事件完成時觸發Event.CLOSE。

如果你有很多這樣的頁面,你需要去更多的算法方法。例如,創建一流BasicPage將與管理器進行交互,並在所有的網頁所需要的方法已經聲明:

package 
{ 
    import flash.display.Sprite; 

    class BasicPage extends Sprite 
    { 
     // A reference to the page manager instance. 
     public var Manager:PageManager; 

     public function destroy():void 
     { 
      while (numChildren > 0) removeChildAt(0); 

      Manager = null; 
     } 

     // Subclasses will have an access to this method to tell manager to show another page. 
     protected function showOtherPage(pageClass:Class):void 
     { 
      Manager.showPage(pageClass); 
     } 

     // A method that is called by manager when everything is ready. 
     // If page should take any actions on start it is a good idea to override this method. 
     public function startEngine():void 
     { 
     } 
    } 
} 

然後,例如網頁A:

package 
{ 
    import flash.events.MouseEvent; 

    public class A extends BasicPage 
    { 
     // Lets say, class A in library have a designed button named Click. 
     public var Click:SimpleButton; 

     // We have things to undo here. 
     override public function destroy():void 
     { 
      Click.removeEventListener(MouseEvent.CLICK, onClick); 
      Click = null; 

      // Pass the destruction to superclass so it wraps its existence either. 
      super.destroy(); 
     } 

     override public function startEngine():void 
     { 
      Click.addEventListener(MouseEvent.CLICK, onClick); 
     } 

     private function onClick(e:MouseEvent):void 
     { 
      // Lets use inherited method to show other page. 
      showOtherPage(B); 
     } 
    } 
} 

所以,PageManager中會像:

package 
{ 
    public class PageManager extends Sprite 
    { 
     private var Page:BasicPage; 

     // constructor 
     function PageManager() 
     { 
      super(); 
      showPage(A); 
     } 

     function showPage(pageClass:Class):void 
     { 
      if (Page) 
      { 
       Page.destroy(); 
       removeChild(Page); 
       Page = null; 
      } 

      Page = new pageClass; 
      Page.Manager = this; 

      addChild(Page); 
      Page.startEngine(); 
     } 
    } 
} 

這一切起初看起來都很嚇人,但事實並非如此。 PageManager將始終有一個當前頁面,一旦需要顯示另一個頁面,當前將被定期銷燬。每個頁面類將傾向於它自己的內容,這使得編碼更簡單,因爲您不需要看到整個圖片。如果您需要任何持久數據,請將其保存在PageManager中,以便每個頁面都可以訪問數據,而無需網頁彼此進行通信。

相關問題