Flex での Flash コンポーネント SWC ファイルの使用
-
02-07-2019 - |
質問
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);
}
}
}