在 Flex 中使用 Flash 组件 SWC 文件

Posted

技术标签:

【中文标题】在 Flex 中使用 Flash 组件 SWC 文件【英文标题】:Using Flash Component SWC file in Flex 【发布时间】: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();

【问题讨论】:

【参考方案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()。

以上是关于在 Flex 中使用 Flash 组件 SWC 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flash CS5 创建 Flex 3.5 组件

如何在 Flex 中使用 UIComponent/Flash

如何创建在 Flex 和 Flash 中可用的超类?

Flash CS4 和 SWC 文件库路径

Flex Builder AS3 项目迁移

使用Flex SDK编译的Flash文件非常大