Actionscript 3 - событие синхронного щелчка

Я пытаюсь создать собственный модальный диалог во флэш-памяти. Я выбрал способ создания класса мувиклипа с пользовательским интерфейсом для диалога с функцией добавления к нему кнопок. Затем я определяю размер интерфейса после добавления всех кнопок и отображаю его на экране.

Это работает до этого момента. Теперь я хочу, чтобы любой вызывающий этот диалог ожидал, пока кнопка не будет нажата, прежде чем пользователь сможет сделать что-либо еще. Что-то вроде:

var dialog:MyDialog = new MyDialog();
dialog.addButton(new MyButton("Foo"));
dialog.addButton(new MyButton("Bar"));
var result:String = dialog.show(); // we will wait here

В dialog.show я хочу показать мувиклип, а затем дождаться, пока пользователь нажмет и кнопки в диалоговом окне, прежде чем вернуться. Событие MouseEvent.CLICK является асинхронным, поэтому я не знаю, как его ждать.

Альтернативой является создание целого пользовательского события завершения для диалогового окна, которое добавляется на экран, вызывающий диалоговое окно, в котором я могу продолжить логику и получить логическое значение, которое отключает другие входные данные, но это довольно большая проблема, и я никогда не делал ничего подобного.

1 ответ

Решение

То, что вы описываете, является неправильным представлением о том, что такое синхронный и асинхронный.

Когда появится диалоговое окно, вы по-прежнему хотите, чтобы пользователь мог нажать кнопку диалога. Если бы процедура была синхронной, то вся программа зависла бы, так как процедуры для действий щелчка мышью никогда не поступали бы. Помните, флеш однопоточный.

Поток, имеющий всплывающее окно, использует тот же поток, что и основное приложение.

Самое простое - просто создать событие на кнопках, которые отправляют какое-либо событие закрытия, которое вы можете прослушивать в своем приложении. Пользовательские классы событий не требуются.

dispatchEvent(new Event("close"))

В качестве примера.

Если вас беспокоит взаимодействие пользователя с частями вне приложения, вы можете просто нарисовать прямоугольник позади всплывающего окна с помощью mouseEnabled true или проверить, используя классы диалога модели Flex.

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