【问题标题】:Using Flash Component SWC file in Flex在 Flex 中使用 Flash 组件 SWC 文件
【发布时间】:2010-09-12 07:22:18
【问题描述】:

我正在通过 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();

}

【问题讨论】:

    标签: apache-flex flash components


    【解决方案1】:

    仅使用该代码,它必须是 page,或者 page.Text 为 null。

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

    编辑:这是组件中的一个错误:draw() 始终使用页面上的highScoresModuleText 属性:仅当页面为HighScoresTextPage 而不是任何其他页面时才设置,例如:@987654324 @,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);
            }
        }
    }
    

    【讨论】:

    • 谢谢,我现在摆脱了错误,但是当我在 flex 中给出这些命令时,屏幕上仍然没有出现任何内容:highscore.showEnterHighScore(_score); highscore.drawNow();我想这是另一个错误。
    • 如果只调用 showEnterHighScore 会发生什么? show*() 方法似乎都立即更新显示,并且似乎不适用于 draw() (所以它有点坏了)
    • :(什么都没有发生,屏幕上什么也没有出现,但是这个函数调用可以代替:highscore.showHighScores(); highscore.drawNow();
    • ps。需要drawow,否则保持空白
    • 奇怪,它为我做了 showHighScore();星期一我回去工作(哈!)时,我将不得不检查 showEnterHighScore()。
    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多