Использование файла Flash Component SWC в Flex

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

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

TypeError: Ошибка № 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();

}


person Tom    schedule 23.09.2008    source источник


Ответы (1)


Только с этим кодом он должен быть либо page, либо 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);
        }
    }
}
person Simon Buchan    schedule 23.09.2008
comment
Спасибо, теперь я избавился от ошибки, но по-прежнему ничего не появляется на экране, когда я даю эти команды в flex: highscore.showEnterHighScore (_score); highscore.drawNow (); Думаю, это очередная ошибка. - person Tom; 26.09.2008
comment
Что произойдет, если вы просто вызовете showEnterHighScore? все методы show * (), похоже, немедленно обновляют отображение и, похоже, не работают с draw () (так что это вроде не работает) - person Simon Buchan; 26.09.2008
comment
:( ничего не происходит, на экране ничего не появляется, но вместо этого работает этот вызов функции: highscore.showHighScores (); highscore.drawNow (); - person Tom; 26.09.2008
comment
пс. Drawow является обязательным, в противном случае он остается пустым - person Tom; 26.09.2008
comment
Странно, у меня это получилось для showHighScore (); Мне нужно будет проверить showEnterHighScore (), когда я вернусь к работе (Ха!) В понедельник. - person Simon Buchan; 26.09.2008
comment
привет, Саймон, есть новости по этому поводу? - person Tom; 30.09.2008
comment
да, с щелчком мыши он работает, а этого нет? {highscore = новые рекорды (); addChild (рейтинг); highscore.showEnterHighScore (50); } обратите внимание, что я добавил 'if (page.highScoresModuleText)' вокруг проблемных строк в draw () - person Tom; 30.09.2008
comment
похоже, что эта странная задержка (щелчок мышью) требуется, чтобы она работала .. Я попытаюсь вызвать drawow () или что-то еще до .show () - person Tom; 30.09.2008
comment
Большое спасибо! Наконец-то он заработал с вызовом функции DRAWNOW () перед вызовом .show () - person Tom; 30.09.2008
comment
Да, я пытался показать, что ему нужна эта задержка - извините, это непонятно! - person Simon Buchan; 01.10.2008