在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章