在Flex中使用Flash Component SWC文件

时间:2020-03-06 14:35:17  来源:igfitidea点击:

我正在通过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库对象?如果是这样,我想一个先前的错误会在创建之前被触发,并被播放器膨胀(如果调试器尚未连接,或者加载共享库时会发生这种情况)。直到将新的显示对象添加到显示列表中之前,才对其设置"阶段"是很常见的。

编辑:这是组件中的错误: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);
        }
    }
}