|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
Специфичная реализация оконного интерфейса.
Вопрос уважаемому сообществу:
Имеется задача - реализация на AS3 нескольких классов оконного интерфейса для взаимодействия с пользователем. Требования к классам - они должны быть максимально просты в использовании. В идеале, класс должен создавать окно одной строчкой. Нужны окна нескольких видов. Самый простейший, сходный с "Alert" уже есть. Окно представляет из себя объект с рамкой, TextField, и кнопкой (которая его закрывает и удаляет из сцены). При вызове создается окно с текстом "ALERT!", которое можно только закрыть. Тут все достаточно просто. А вот далее я застрял с реализацией простейшего диалогового окна. Т.е. его функции: вывести текст и две кнопки снизу для выбора - да/нет. Застрял не потому что не знаю как вообще это сделать, а потому, что не могу сообразить - а возможно ли упростить будущее использование до вот примерно такой конструкции: var questionWindow:QuestionWindow = new QuestionWindow("Some question"); var answer:Boolean = questionWindow.takeAnswer(); Это окно действительно должно блокировать все остальное, пока не будет получен этот ответ. Сейчас у меня гуляют мысли по поводу организации ожидания в методе takeAnswer с помощью цикла while с условием проверки одного из свойств этого самого объекта работающего как флаг - готов/не готов. Изменится же он должен когда сработает обработчик события от кнопки. Но тут получается, что должно параллельно исполняться два потока - первый в методе takeAnswer, а второй в этом самом обработчике. И вот тут все зависит от того - работает ли флеш многопоточно со своими программами, или в каждый момент времени обрабатывается только один поток. В первом случае, по идее должно сработать, а во втором, цикл в takeAswer просто завесит программу, т.к. параллельно возникшее событие от кнопки просто не будет обработано... Так вот вопрос: возможна ли такая реализация на AS3 принципиально? Или это идиотская затея в связи с принципами работы языка? Просто не хочется тратить время на заведомо невозможный вариант. Если же возможно - подробности не обязательны. Да, и еще. Буду очень благодарен если кто-нибудь ткнет меня в ссылку по справочным материалам подобных направлений - реализации окон на AS3. Может перестану велосипеды изобретать. |
|
|||||
Цитата:
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
Спасибо. Значит не пройдет такой номер. Буду думать в другом направлении.
Хочется получить на выходе максимально простой в использовании набор окон. В идеале - чтобы вызов нужной функциональности сводился к одной строчке... |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Когда я делал модальное окно, то тупо создавал полупрозрачный спрайт на весь стэйдж.
Поверх него уже само окно. окошко можно и так сделать
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 25.05.2011 в 16:47. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
почему-бы не сделать проще:
на mc вешаем лисенеры для обработки нажатия кнопок (с weakRefference=true) popup содержит только бэкграунд и, переданный в конструктор спрайт. При вызове show все плавно появляется. Преимущества - всего 1 класс Popup для всех окон |
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
Тут у меня основная проблема не в том, как заблокировать остальное, а в том, как свести к минимуму количество телодвижений в коде основной функции, нужных для вызова окна, и получения результата из него...
Одной строчкой пока обходиться не получается. И, похоже не выйдет в принципе. Кроме строчки с генерацией окна, еще как минимум еще отдельно приемник нужен. Причем отдельной функцией... 2:undefined - В этом что-то есть... Но тут в общем, то же самое - ни mc, ни popup не могут вернуть данные о выборе пользователя прямо туда же где были сами вызваны - т.е. нельзя как-то продолжить исполнение программы сразу после строчки popup.show(); и при этом уже зная - что там пользователь нажал... |
|
|||||
Вывод окна одной строчкой )
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Регистрация: Feb 2011
Сообщений: 11
|
Цитата:
А вот тут меня заинтересовало - из примера видно, что show возвращает тип Alert - это что? Неужели все-же данные о результатах взаимодействия с пользователем? Или, все-же, это просто код ошибки если таковая случилась при выводе? |
|
|||||
Нет, это собственно сам Alert (это его статичный метод). Данные будут возвращены в функцию указанную как closeHandler или можно подписаться на событие CloseEvent у возвращенного инстанса.
Добавлено через 2 минуты Еще раз. Все выполняется в одном потоке (есть нюансы, но они в вашем случае, роли не играют). Если запустить цикл, то приложение будет "висеть" пока не отработает цикл (или пока не вылетит по таймауту). Данные можете вернуть либо через колбэк, либо считать по событию.
__________________
משיח לא בא משיח גם לא מטלפן Последний раз редактировалось alatar; 25.05.2011 в 17:29. |
Часовой пояс GMT +4, время: 02:49. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|