Я получаю доступ к пользовательскому 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();
}





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