2017-03-06 11 views
1

私はactionscript3で作業しています。私は独学ですので、タイムラインでのコーディングや複数のシーンの使用などいくつかの悪い習慣を開発したと思います。ドキュメントクラスを使用してactionscriptにflaファイルをリンクする

私は大きなプロジェクトに取り組んでいるので、これを修正したいと考えています。

私が読んだところでは、複数の.flaファイルをリンクする方が、それぞれ独自のドキュメントクラスを使用する方が良い方法です。あれは正しいですか?

もしそうなら、ドキュメントクラスで.flaをロードし、それを次の.flaファイルにリンクするにはどうすればいいですか?それとも、私は何が推奨されていると誤解していますか?

ありがとうございます!

+1

インターネットでチュートリアルを読もうとしましたか?ここには[**有用なガイド**](https://code.tutsplus.com/tutorials/how-to-use-a-document-class-in-flash--active-3233)があります。複数のFLAは使用しません。 1つのFLAがアプリの主な出発点になります。その後、より多くの関数などで他のASファイルを 'インポート 'することができます。ネットFLAにオーディオ/ビジュアルコンテンツがある場合は、そのファイルをSWFにコンパイルします。主なアプリでは、SWFをロードして、SWF自身のコンテンツや独自の機能にアクセスできるようにします。 –

答えて

1

あなたは以下の前提条件のいずれかを持っていない限り、複数のロード可能なモジュールでアプリケーションを分割する一切のポイントはありません:

  • 使用すると、1つのファイルにすべてをかける場合は、読み込みおよびコンテンツ
  • をアンロードするために、スマートリソース管理を持っていますデザイン時に作業するのが大きすぎたり、難しすぎたりする場合があります。

通常のAS3では、シーンインスタンスの作成/破棄とメインドキュメントclの使用が行われています彼らのマネージャーとしてお尻。ライブラリ内のコンテンツを設計し、それらのための動作AS3クラスを作成します。あなたは管理者がそれらのいずれかを表示し、次のいずれかを表示するように信号を待つべき開始時に2つのコンテンツのクラス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を起動する必要があります。

このようなページがたくさんある場合は、アルゴリズム的なアプローチが必要です。

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のは次のようになります。たとえば、管理者と対話し、すべてのページに必要な方法は、既に宣言したどのクラスBasicPageを作成します

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に保存しておき、ページ間でのデータのやりとりが不要になります。

関連する問題