![]() |
Специфичная реализация оконного интерфейса.
Вопрос уважаемому сообществу:
Имеется задача - реализация на AS3 нескольких классов оконного интерфейса для взаимодействия с пользователем. Требования к классам - они должны быть максимально просты в использовании. В идеале, класс должен создавать окно одной строчкой. Нужны окна нескольких видов. Самый простейший, сходный с "Alert" уже есть. Окно представляет из себя объект с рамкой, TextField, и кнопкой (которая его закрывает и удаляет из сцены). При вызове Код AS3:
Тут все достаточно просто. А вот далее я застрял с реализацией простейшего диалогового окна. Т.е. его функции: вывести текст и две кнопки снизу для выбора - да/нет. Застрял не потому что не знаю как вообще это сделать, а потому, что не могу сообразить - а возможно ли упростить будущее использование до вот примерно такой конструкции: Код AS3:
Это окно действительно должно блокировать все остальное, пока не будет получен этот ответ. Сейчас у меня гуляют мысли по поводу организации ожидания в методе takeAnswer с помощью цикла while с условием проверки одного из свойств этого самого объекта работающего как флаг - готов/не готов. Изменится же он должен когда сработает обработчик события от кнопки. Но тут получается, что должно параллельно исполняться два потока - первый в методе takeAnswer, а второй в этом самом обработчике. И вот тут все зависит от того - работает ли флеш многопоточно со своими программами, или в каждый момент времени обрабатывается только один поток. В первом случае, по идее должно сработать, а во втором, цикл в takeAswer просто завесит программу, т.к. параллельно возникшее событие от кнопки просто не будет обработано... Так вот вопрос: возможна ли такая реализация на AS3 принципиально? Или это идиотская затея в связи с принципами работы языка? Просто не хочется тратить время на заведомо невозможный вариант. Если же возможно - подробности не обязательны. Да, и еще. Буду очень благодарен если кто-нибудь ткнет меня в ссылку по справочным материалам подобных направлений - реализации окон на AS3. Может перестану велосипеды изобретать. :) |
Цитата:
Цитата:
|
Подкладывать под окно прозрачную область, чтобы не тыркалось никуда и к примеру передавать в конструктор окна ссылку на callback функцию, которая будет обрабатывать нажатия кнопок в этом окне.
|
Цитата:
Хочется получить на выходе максимально простой в использовании набор окон. В идеале - чтобы вызов нужной функциональности сводился к одной строчке... |
Когда я делал модальное окно, то тупо создавал полупрозрачный спрайт на весь стэйдж.
Поверх него уже само окно. окошко можно и так сделать Код AS3:
|
почему-бы не сделать проще:
Код AS3:
popup содержит только бэкграунд и, переданный в конструктор спрайт. При вызове show все плавно появляется. Преимущества - всего 1 класс Popup для всех окон |
Тут у меня основная проблема не в том, как заблокировать остальное, а в том, как свести к минимуму количество телодвижений в коде основной функции, нужных для вызова окна, и получения результата из него...
Одной строчкой пока обходиться не получается. И, похоже не выйдет в принципе. Кроме строчки с генерацией окна, еще как минимум еще отдельно приемник нужен. Причем отдельной функцией... 2:undefined - В этом что-то есть... Но тут в общем, то же самое - ни mc, ни popup не могут вернуть данные о выборе пользователя прямо туда же где были сами вызваны - т.е. нельзя как-то продолжить исполнение программы сразу после строчки popup.show(); и при этом уже зная - что там пользователь нажал... |
Вывод окна одной строчкой )
Код AS3:
|
Цитата:
А вот тут меня заинтересовало - из примера видно, что show возвращает тип Alert - это что? Неужели все-же данные о результатах взаимодействия с пользователем? Или, все-же, это просто код ошибки если таковая случилась при выводе? :) |
Нет, это собственно сам Alert (это его статичный метод). Данные будут возвращены в функцию указанную как closeHandler или можно подписаться на событие CloseEvent у возвращенного инстанса.
Добавлено через 2 минуты Еще раз. Все выполняется в одном потоке (есть нюансы, но они в вашем случае, роли не играют). Если запустить цикл, то приложение будет "висеть" пока не отработает цикл (или пока не вылетит по таймауту). Данные можете вернуть либо через колбэк, либо считать по событию. |
| Часовой пояс GMT +4, время: 13:31. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.