0

AS3クラスのflashVarsにアクセスしようとすると、コンパイラエラーが発生し続けます。

コードの簡略版は次のとおりです。

package myPackage {
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.display.Sprite;
  public class myClass {
    public function CTrafficHandler() {
        var myVar:String = LoaderInfo(this.root.loaderInfo).parameters.myFvar;}}}

そして、コンパイルエラーが発生します:

1119:静的タイプsource:myClassの参照を介した、未定義の可能性のあるプロパティルートへのアクセス。

クラス行をに変更すると

public class myClass extends Sprite {

コンパイラエラーは発生しませんが、出力ウィンドウに表示されます。

TypeError:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。

デバッガーを介して(提案されているように)this.rootがnullであることがわかります。

どうすればこの問題を解決できますか?

4

5 に答える 5

3

問題は、フラッシュ変数にアクセスしようとしている時点で、DisplayObject が DisplayList に追加されていないことです。したがって、オブジェクトによると、ルート表示オブジェクトは null です。

以下を使用して、DisplayObject がステージ上にあることを確認できます。

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

    public class MySprite extends Sprite
    {
        // constructor
        public function MySprite()
        {
            super();
            addEventListener( Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true );
        }

        private function onAddedToStage( event:Event ):void
        {
            removeEventListener( Event.ADDED_TO_STAGE, onAddedToStage );

            var paramList:Object = LoaderInfo( this.root.loaderInfo ).parameters;
            var myParam:String = paramList["myParam"];
        }
    }
}

`

于 2010-11-24T15:25:18.240 に答える
2

私は問題が何であるかを見つけました。問題のクラスは、プロジェクトで使用されたメインクラスではなく、セカンダリクラスでした。

パラメーターを取得するためにコードをメインクラスに移動し、パラメーターを取得した後、それらをクラスコンストラクター関数に送信しました。

于 2008-09-20T22:23:00.857 に答える
2

問題は、非表示オブジェクトまたはドキュメント クラスの外部からこの情報にアクセスしようとしたことです。ルートまたはステージにアクセスする場合は、アクセスするオブジェクトを最初に表示リストに追加する必要があります。

プロジェクト全体で頻繁に使用される変数には、よく flashvars を使用します。国や言語などの変数。この場合、ドキュメント クラスでこれらのパラメーターをキャッチし、そのパラメーターを値として持つパブリック変数を作成するのが最善であることがわかりました。これにより、これらの変数への _global スタイルのアクセスが可能になります。とはいえ、特に共同プロジェクトで作業する場合は、グローバル変数を慎重に使用する必要があります。

于 2008-09-22T18:11:28.713 に答える
1

別の方法として、 mx.core.Application.application.parametersオブジェクトを使用してみることができます。

mx.core.ApplicationのLiveDocsページから:

アプリケーション:オブジェクト
[静的][読み取り専用]トップレベルアプリケーションへの参照。

parameters:Object
[読み取り専用]parametersプロパティは、このアプリケーションに提供されるパラメーターを表す名前と値のペアを含むオブジェクトを返します。

パラメータのソースには、アプリケーションのURLのクエリ文字列とFlashVars HTMLパラメータの値の2つがあります(これはメインアプリケーションにのみ影響します)。

于 2008-09-20T22:30:59.997 に答える
0

Spriteから拡張する必要があると思いますが、必ず最初に初期化して、ステージに配置するようにしてください。デバッグを有効にして、例外レポートにあるように正確にnullが何であるかを確認してください。

于 2008-09-20T21:39:03.833 に答える