我通过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();
}
答案 0 :(得分:3)
只有该代码,它必须是page或page.Text,为null。
按照名称,我猜猜页面是你用AS创建的Flash库对象?如果是这样,我猜测之前的错误是在创建之前触发并被播放器吞噬(如果调试器尚未附加,或者加载共享库时出现问题)。在将新显示对象添加到显示列表之前,不会为其设置'stage'。
draw()
始终使用页面上的highScoresModuleText
属性:仅当页面为HighScoresTextPage
时才设置,而不是任何其他页面页面,例如:HighScoresTablePage
,showHighsSores()
将其设置为。这在Flash中大概是因为对象是在舞台上,或者至少得到showHighScores()
调用之前创建的,因此draw()
最先被调用,因为该组件不坏,是不是后调用。
在这种情况下,正确的方法是让show*()
设置一些属性,然后invalidate()
让draw()
稍后解决,但快速解决方法是只添加'{ {1}}围绕if (page.highScoresModuleText)
中的违规行。更快的解决方法是尽早创建和draw()
组件(如启动),并在稍后调用addChild()
。
这对我有用:
showHighScores()