Использование SWC-файла Flash Component во Flex - PullRequest
0 голосов
/ 23 сентября 2008

Я получаю доступ к пользовательскому UIComponent через файл SWC из Flex 3. Этот компонент работает нормально во Flash CS3, но использование его из Flex приводит к странной ошибке в draw ().

Я добавил компонент SWC внутри Sprite (с addchild) и его путь в LIB.

Ошибка типа: ошибка # 1010: термин не определен и не имеет свойств.

at com.xxxx.highscores::HighScores/draw()

at fl.core::UIComponent/callLaterDispatcher()

Вот функция draw () этого компонента пользовательского интерфейса:

переопределить защищенную функцию draw (): void { isInitializing = false;

     page.Text.x = width / 2;
     page.Text.y = height / 2;

     drawBackground();

}

1 Ответ

3 голосов
/ 23 сентября 2008

При наличии только этого кода это должна быть страница или page.Text имеет значение null.

Судя по именам, я думаю, страница - это объект библиотеки Flash, который вы создаете с помощью AS? Если это так, я бы предположил, что предыдущая ошибка запускается до того, как она была создана и поглощена проигрывателем (может произойти, если отладчик еще не подключен или возникли проблемы с загрузкой общих библиотек). 'stage' не устанавливается для нового экранного объекта, пока он не будет добавлен в список отображения.

РЕДАКТИРОВАТЬ: это ошибка в компоненте: 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);
        }
    }
}
...