Использование файла 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();

}

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
4 440
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);
        }
    }
}

Спасибо, теперь я избавился от ошибки, но по-прежнему ничего не появляется на экране, когда я даю эти команды в flex: highscore.showEnterHighScore (_score); highscore.drawNow (); Думаю, это очередная ошибка.

Tom 26.09.2008 15:59

Что произойдет, если вы просто вызовете showEnterHighScore? все методы show * (), похоже, немедленно обновляют отображение и, похоже, не работают с draw () (так что это вроде не работает)

Simon Buchan 26.09.2008 16:21

:( ничего не происходит, на экране ничего не появляется, но вместо этого работает этот вызов функции: highscore.showHighScores (); highscore.drawNow ();

Tom 26.09.2008 16:25

пс. Drawow является обязательным, в противном случае он остается пустым

Tom 26.09.2008 16:27

Странно, у меня это получилось для showHighScore (); Мне нужно будет проверить showEnterHighScore (), когда я вернусь к работе (Ха!) В понедельник.

Simon Buchan 26.09.2008 16:50

привет, Саймон, есть новости по этому поводу?

Tom 30.09.2008 12:12

да, с щелчком мыши он работает, а этого нет? {highscore = новые рекорды (); addChild (рейтинг); highscore.showEnterHighScore (50); } обратите внимание, что я добавил "if (page.highScoresModuleText)" вокруг проблемных строк в draw ()

Tom 30.09.2008 15:48

похоже, что эта странная задержка (щелчок мышью) требуется, чтобы она работала .. Я попробую вызвать drawow () или что-то еще до .show ()

Tom 30.09.2008 15:51

Большое спасибо! Наконец-то он заработал с вызовом функции DRAWNOW () перед вызовом .show ()

Tom 30.09.2008 16:02

Да, я пытался показать, что ему нужна эта задержка - извините, что непонятно!

Simon Buchan 01.10.2008 10:21

Другие вопросы по теме