我通过Flex 3的SWC文件访问自定义UIComponent。 此组件在Flash CS3中正常工作,但在Flex中使用它会在draw()中产生一个奇怪的错误。

我在Sprite中添加了swc组件(带有addchild),并在LIB路径中添加了它。

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();

}

有帮助吗?

解决方案

只有该代码,它必须是page或page.Text,为null。

按照名称,我猜猜页面是你用AS创建的Flash库对象?如果是这样,我猜测之前的错误是在创建之前触发并被播放器吞噬(如果调试器尚未附加,或者加载共享库时出现问题)。在将新显示对象添加到显示列表之前,不会为其设置'stage'。

编辑:这是组件中的一个错误: draw()总是在页面上使用 highScoresModuleText 属性:仅当页面是 HighScoresTextPage时才设置,而不是任何其他页面,例如: HighScoresTablePage showHighsSores()将其设置为。这可以在Flash中工作,大概是因为对象在舞台上,或者至少在调用 showHighScores()之前创建,所以首先调用 draw(),因为组件不会失效,之后不会被调用。

在这种情况下,正确的方法是让 show *()只设置一些属性,然后 invalidate() draw()稍后详细说明,但快速解决方法是在 draw()中的有问题的行周围添加' if(page.highScoresModuleText)。更快的解决方法是尽早创建和 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