質問

Flex 3 から SWC ファイル経由でカスタム UIComponent にアクセスしています。このコンポーネントは Flash CS3 では正常に動作しますが、Flex から使用すると、draw() で奇妙なエラーが発生します。

スプライト内に swc コンポーネントを (addchild を使用して) 追加し、LIB パスに追加しました。

タイプエラー:エラー #1010:用語は未定義であり、プロパティがありません。

at com.xxxx.highscores::HighScores/draw()

at fl.core::UIComponent/callLaterDispatcher()

この UI コンポーネントのdraw() 関数は次のとおりです。

保護された関数draw():void {isInitializing = false;

     page.Text.x = width / 2;
     page.Text.y = height / 2;

     drawBackground();

}

役に立ちましたか?

解決

そのコードのみの場合、page または page.Text のいずれかである必要があり、null です。

名前から考えると、page は AS で作成した Flash ライブラリ オブジェクトだと思いますか?もしそうなら、以前のエラーが作成される前に発生し、プレーヤーによって飲み込まれていると推測します(デバッガーがまだアタッチされていない場合、または共有ライブラリのロード時に問題が発生する場合に発生する可能性があります)。新しい表示オブジェクトが表示リストに追加されるまで、「ステージ」が設定されないのが一般的です。

編集:それはコンポーネントのバグです。 draw() 常に使用します highScoresModuleText ページ上のプロパティ:これは、ページが HighScoresTextPage, 、他のページではありません。例: HighScoresTablePage, 、 どれの showHighsSores() に設定します。これはおそらくオブジェクトがステージ上にあるか、少なくともその前に作成されているため、Flash で機能します。 showHighScores() と呼ばれるので、 draw() は最初に呼び出され、コンポーネントは無効化されないため、その後は呼び出されません。

この場合の正しい方法は、 show*() いくつかのプロパティを設定するだけで、 invalidate() 持つため draw() 後で考えてみましょう。簡単な解決策は、「」を追加するだけです。if (page.highScoresModuleText)' の問題のある行の周囲 draw(). 。さらに迅速な修正方法は、 addChild() コンポーネントを早期に(起動時など)呼び出して、 showHighScores() かなり後に。

これは私にとってはうまくいきます:

package
{
    import flash.display.Sprite;
    import com.novelgames.flashgames.highscores.HighScores;
    import flash.events.MouseEvent;

    public class As3_scratch extends Sprite
    {
        private var highscore : HighScores;

        public function As3_scratch()
        {
            highscore = new HighScores();
            addChild(highscore);
            stage.addEventListener(MouseEvent.CLICK, onClick);
        }

        private function onClick(event : MouseEvent) : void
        {
            highscore.showEnterHighScore(50);
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top