-1

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

我在 Sprite(带有 addchild)中添加了 swc 组件,并将其添加到 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();

}

4

1 回答 1

3

只有该代码,它必须是页面,或者 page.Text 为空。

按名称,我猜 page 是您使用 AS 创建的 Flash 库对象?如果是这样,我猜想之前的错误在它被创建并被播放器吞噬之前被触发(如果调试器尚未附加,或者加载共享库出现问题,可能会发生)。在添加到显示列表之前不会为新显示对象设置“阶段”是常见的。

编辑:这是组件中的一个错误:draw()始终使用highScoresModuleTextpage: 上的属性,该属性仅在页面为 a 时设置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);
        }
    }
}
于 2008-09-23T13:45:45.490 回答