-1

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

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

TypeError:エラー#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();

}

4

1 に答える 1

3

そのコードだけでは、それは page であるか、page.Text が null である必要があります。

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

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

この場合の正しい方法は、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);
        }
    }
}
于 2008-09-23T13:45:45.490 に答える