0

コードを整理するために、(長い) メイン コントローラー クラスを個別のファイルに分割しようとしています、新しいファイルは引き続きメイン コントローラー クラスの変数と関数にアクセスできる必要があります。

コントローラー クラスから新しいクラス/ファイルにコードをカット アンド ペーストして、コントローラー クラスが新しいクラスを呼び出せるようにし、新しいクラスがコントローラー クラスのプロパティと関数にアクセスできるようにしようとしています。

適切な設計パターンを完全に殴打しているわけではないと仮定すると、以下は、このタスクを達成するための失敗した試みです。

package
{   
import flash.display.Sprite;
import flash.events.Event;

public class Test extends Sprite
    {
    public var myString:String;

    public function Test()
        {
        if  (stage)
            init(null);
            else
            addEventListener(Event.ADDED_TO_STAGE, init);
        }

    private function init(evt:Event):void
        {
        if  (hasEventListener(Event.ADDED_TO_STAGE))
            removeEventListener(Event.ADDED_TO_STAGE, init);

/////////////// MOVE COMMENTED CODE TO NEW FILE ///////////////////////
//      
//      //Assign The String A Value
//      myString = "Hello world";
//      
//      //Draw A Blue Square
//      var sq:Sprite = new Sprite();
//      sq.graphics.beginFill(0x0000FF);
//      sq.graphics.drawRect(10, 10, 100, 100);
//      sq.graphics.endFill();
//      super.addChild(sq);
//      
//      //Call Tracer Function
//      tracer();
//
//////////////////////////////////////////////////////////////////////

        //Call pasted method in NewFile.as
        NewFile.myNewFunction();     // <- this doesn't work
        }

    public function tracer():void
        {
        trace(myString);
        }
    }
}

新しいファイルには Controller クラスへのアクセス権がありません - 動作しません。コードが削除されておらず、元の場所に残っているかのように、Controller クラスのプロパティ、関数、ステージなどにアクセスできるように、新しいファイルを作成する方法を教えてください。

package
{   
public class NewFile
    {
    public static function myNewFuntion():void
        {
        //Assign The String A Value
        myString = "Hello world";

        //Draw A Blue Square
        var sq:Sprite = new Sprite();
        sq.graphics.beginFill(0x0000FF);
        sq.graphics.drawRect(10, 10, 100, 100);
        sq.graphics.endFill();
        super.addChild(sq);

        //Call Tracer Function
        tracer();
        }
    }
}
4

2 に答える 2

3
public class MainClass は Sprite を拡張します
{
    プライベート var サブクラス:サブクラス;

    パブリック関数 MainClass
    {
       var controller:Controller = new Controller();

       サブクラス = 新しいサブクラス (コントローラ);
       addChild( サブクラス );
    }

    プライベート関数 init():void
    {
       subClass.doWhatever();
    }
}

パブリック クラス コントローラー
{

    パブリック関数 doThis():void
    {
     }
    パブリック関数 doThat():void
    {
         trace("コントローラがそれを行う...");
     }
    パブリック関数 doSomethingElse():void
    {
     }
}

public class Subclass extends Sprite
{
     プライベート変数コントローラー:コントローラー;

     public function サブクラス(コントローラ:コントローラ)
     {
         this.controller = コントローラー;
         trace( "新しいサブクラス インスタンス!" );
     }

     パブリック関数 doWhatever():void
     {
         controller.doThat();
     }
}
于 2010-10-07T01:58:34.183 に答える
2

このコード

//Call Tracer Function 
tracer(); 

トレーサーは静的メソッドではないため、機能しません。

これです :

super.addChild(sq);

NewFile はクラスを継承しないため、どちらも機能しません。super()INHERITANCE リレーションでマザー クラスの同名メソッドを呼び出します。そこですべきことは、おそらく COMPOSITION または AGGREGATION の関係です: newFile IS NOT a Controller, but Controller HAS a newFile.

エラー メッセージが表示されない場合、何が問題なのかを正確に知ることは困難です。

デザインに関しては、PatrickS に同意せざるを得ません。複合パターンを確認することをお勧めします。これは、そこで必要なものである可能性があります。

于 2010-10-07T08:07:56.023 に答える