在Flex中使用Flash Component SWC文件
我正在通过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库对象?如果是这样,我想一个先前的错误会在创建之前被触发,并被播放器膨胀(如果调试器尚未连接,或者加载共享库时会发生这种情况)。直到将新的显示对象添加到显示列表中之前,才对其设置"阶段"是很常见的。
编辑:这是组件中的错误:draw()始终在页面上使用highScoresModuleText属性:仅在页面为HighScoresTextPage而不是其他任何页面时才设置,例如:HighScoresTablePage ,将其设置为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); } } }