在Flex中使用Flash组件SWC文件
-
02-07-2019 - |
题
我通过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库对象?如果是这样,我猜测之前的错误是在创建之前触发并被播放器吞噬(如果调试器尚未附加,或者加载共享库时出现问题)。在将新显示对象添加到显示列表之前,不会为其设置'stage'。
draw()
总是在页面上使用 highScoresModuleText
属性:仅当页面是 HighScoresTextPage时才设置
,而不是任何其他页面,例如: HighScoresTablePage
, showHighsSores()
将其设置为。这可以在Flash中工作,大概是因为对象在舞台上,或者至少在调用 showHighScores()
之前创建,所以首先调用 draw()
,因为组件不会失效,之后不会被调用。
在这种情况下,正确的方法是让 show *()
只设置一些属性,然后 invalidate()
让 draw()
稍后详细说明,但快速解决方法是在 draw()
中的有问题的行周围添加' if(page.highScoresModuleText)
。更快的解决方法是尽早创建和 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);
}
}
}
不隶属于 StackOverflow