0

ムービーの最初のフレームに次のコードを配置すると、正常に動作します。

var strGlobal:String = "Global"; 
function scopeTest() 
{ 
    trace(strGlobal); // Global 
} 
scopeTest(); 
trace(strGlobal); // Global

しかし、それを削除してドキュメント クラスに配置すると、次のエラーが発生します。

私は actionscript 3 を初めて使用し、この単純な例をメインのドキュメント クラスから機能させるには何を変更すればよいか考えていました。

4

2 に答える 2

1

.fla ファイルと同じディレクトリにScopeTest.asという名前のファイルを作成し、次のクラスを定義します。

package  {
    import flash.display.MovieClip;
    public class ScopeTest extends MovieClip  {
        var strGlobal:String = "Global"; 
        public function ScopeTest() {
            trace(strGlobal); // Global 
        }
    }
}

次に、.fla プロジェクト (ドキュメント クラス) 内で:

ここに画像の説明を入力

次に、実行すると、「グローバル」がトレースアウトされ、動作することを確認する必要があります。

于 2012-01-29T21:12:27.437 に答える
0

ドキュメントクラスの作成を見てみましょう。

ステップ1:パッケージの宣言-パッケージは、.flaを基準にしてドキュメントクラスが格納される場所を表します。ドキュメントクラスが.flaと同じディレクトリにある場合は、次のように記述する必要があります。

package

フォルダ内にある場合は、の後に追加する必要がありますpackage。ドキュメントクラスが次のディレクトリにあるとしましょうsrc

package src

これでソートされたので、次のようになります。

package
{
    //
}

次に行う必要があるのは、ドキュメントクラスで使用する必要のあるクラスをインポートすることです。MovieClipドキュメントクラスで拡張する必要があるので、それをインポートしましょう。

package
{
    import flash.display.MovieClip;
}

例を説明するために必要なのはこれだけです。次に、必要な3番目の要素であるクラス宣言に移ります。この場合、次の3つの部分で構成されます。

  1. クラスの名前空間- internal(同じパッケージ内のクラスからのみクラスにアクセスできるようにする場合)またはpublic(プロジェクト内のどこからでもアクセスできるようにする場合)のいずれかになります。
  2. あなたのクラス名。
  3. クラスが拡張するもの-この場合はMovieClip。

全体として、あなたは次のようになります。

public class Document extends MovieClip

これで、次のようなものになります。つまり、追加を開始しpropertiesmethods

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        //
    }
}

最初にやりたいことはconstructor、クラスのを作成することです。コンストラクターは、このクラスのインスタンスが作成されたとき、またはあなたの場合はドキュメントクラスであるときにすぐに呼び出されます。

コンストラクターは、それを含むクラスと同じ名前のメソッドを作成することによって定義されます。コンストラクターもそうpublicである必要があり、何も返さない必要があります。空のコンストラクターを使用した新しいコードは次のとおりです。

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Constructor
        public function Document()
        {
            //
        }
    }
}

次のステップは、クラスに属するプロパティを作成することです。あなたの例では、を使用strGlobal:Stringしたので、それを追加しましょう。プロパティは通常、クラス宣言のすぐ下、コンストラクターの上に属します。プロパティは4つの部分で構成されています。

  1. 名前空間-これにより、プロパティのアクセシビリティが決まります。これを省略すると、デフォルトはになりますinternal。今のところ、これらは基本です:
    • public-プロパティは、クラスのインスタンスを参照している場所からアクセスできます。
    • private-プロパティにはクラス内からのみアクセスできます-これは最初は役に立たないように見えますが、最終的には主にこれを使用することになります。
    • protected-プロパティは、クラスを拡張するクラスでアクセスできます。
    • internal-同じパッケージに含まれるクラスからプロパティにアクセスできます。
  2. あなたのプロパティ名。
  3. プロパティタイプ。
  4. あなたのプロパティ値。

あなたの場合、strGlobalは次のようになります。

public var strGlobal:String = "Global";

それをドキュメントクラスに追加しましょう。

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Properties
        public var strGlobal:String = "Global";

        // Constructor
        public function Document()
        {
            //
        }
    }
}

次に、質問に従ってメソッドを作成しますscopeTest()。メソッドは5つの部分で構成されています。

  1. 名前空間-メソッドはプロパティと同じ名前空間を使用します(上記を参照)。
  2. メソッド名。
  3. メソッド引数。
  4. リターンタイプ。
  5. コンテンツ。

scopeTest()引数がなく、何も返さないため、次のようになります。

public function scopeTest():void
{
    trace(strGlobal);
}

メソッドは通常、コンストラクターの下のどこかに属しているので、ここでスロットに入れましょう。

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Properties
        public var strGlobal:String = "Global";

        // Constructor
        public function Document()
        {
            //
        }

        // Output the value of strGlobal
        public function scopeTest():void
        {
            trace(strGlobal);
        }
    }
}

scopeTest()すべての準備が整ったので、コンストラクター内から呼び出すことができます。コンストラクターはすぐに呼び出されるため、Global出力パネルに印刷されたものが表示されます(Flash IDE内でコンストラクターに正しくリンクされていると仮定します)。

お役に立てれば。

于 2012-01-30T04:54:01.640 に答える