Спешу поделиться идеей по созданию многооконного приложения

Уроки по PHP, Javascript и т.п.
Ответить
AlexB
Сообщения: 12
Зарегистрирован: 02 дек 2010, 01:13

Спешу поделиться идеей по созданию многооконного приложения

Сообщение AlexB »

Если это не катит в качестве урока - удаляйте смело :)
Суть такая, часто нужно сделать приложение с несколькими "окнами". Если не писать в кадрах, то создание нескольких кадров и переход между ними по кликам - не подходит. В таком случае, имхо, можно сделать несколько контейнеров (по сути - окна), в которых и будем размещать весь пользовательский интерфейс. В данном примере, создается три окна, в каждом по одной кнопке. При нажатии на кнопку - переход к следующему окну с неким визуальным эффект. Собственно, вот листинг:

Код: Выделить всё

 package{    import flash.display.*;    import flash.events.*;    import fl.controls.*;    import flash.utils.Timer;    import flash.sampler.Sample;    import flash.text.TextField;                public class Main extends Sprite    {        private var winusr:Sprite=new Sprite(); //Создаем окна        private var winfr:Sprite=new Sprite();        private var winset:Sprite=new Sprite();        private var winblock:Sprite=new Sprite();//Прозрачное окно, которе блокирует действия при отработке визуального эффекта        private var gFrom: Sprite; //Указатели на окна для визуального эффекта        private var gTo: Sprite;        private var GlobalContainer: Object=new Object();//Создаем объект, в котором будем создавать окна                                                        //с контейнером будет wrapper, без - GlobalContainer                    public function Main():void        {            var btnusr: Button=new Button; //Создаем кнопки            var btnfr: Button=new Button;            var btnset: Button=new Button;            var btnblock: Button=new Button;                        GlobalContainer=stage; //поскольку пример без контейнера             btnusr.label='User';            btnfr.label='Friend';            btnset.label='Settings';            btnblock.label='Block';                        PlaceBtn(winusr, btnusr);           //Размещаем кнопки в окна            PlaceBtn(winfr, btnfr);             //тут можно прописать различные функции вида            PlaceBtn(winset, btnset);           //CreateUsrWin, CreateFriendWin и т.п.            PlaceBtn(winblock, btnblock);                                                       winusr.alpha=1;  //Выводим первое окно, остальные делаем непрозрачными            winfr.alpha=0;            winset.alpha=0;            winblock.alpha=0;                        GlobalContainer.addChild(winusr); //Добавляем на сцену окна, при использовании контейнера            GlobalContainer.addChild(winfr);  //заменяем             GlobalContainer.addChild(winset);            GlobalContainer.addChild(winblock);             SetPos(winusr); //Позиционируем окна в контейнере. Можно делать несколько функций, например,            SetPos(winfr);  //для основных окон SetWin, для диалогов - SetDlg            SetPos(winset);            SetPos(winblock);                                GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);//Выводим наверх блокирующее окно        GlobalContainer.setChildIndex(winusr,GlobalContainer.numChildren-1);//Выводим наверх первое окно            //теперь блокирующее окно - у нас находится сразу под ним                        btnusr.addEventListener(MouseEvent.CLICK,usrClick);             btnfr.addEventListener(MouseEvent.CLICK,frClick);            btnset.addEventListener(MouseEvent.CLICK,setClick);         }               public function usrClick(event: MouseEvent): void       {          //Блокируем клики по всем объектам - выводим наверх прозрачное окно с кнопкой без обработчка          //кнопка - в размер всего окна          GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);          //вызываем функцию смены окна          winChange(winusr, winfr);       }               public function frClick(event: MouseEvent): void       {          GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);           winChange(winfr, winset);       }               public function setClick(event: MouseEvent): void       {          GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);           winChange(winset, winusr);       }               public function SetPos(obj: Sprite): void       {           obj.width=807;           obj.height=730;           obj.x=0;           obj.y=0;       }       public function PlaceBtn(prnt: Sprite, btn: Button): void       {         if (btn.label=='Block'){ //если блокирующая кнопка - делаем в размер всего окна           prnt.addChild(btn);           btn.x=prnt.x;           btn.y=prnt.y;           btn.width=prnt.width;           btn.height=prnt.height;          }else{           prnt.addChild(btn);           btn.x=10;           btn.y=10;           btn.width=60;           btn.height=20;         }       }            public function winChange(from: Sprite, to: Sprite): void      {          var ti: Timer=new Timer(1,51); //Задаем таймер для создания визуального эффекта          gTo=to; //присваиваем указателем, какие окна будут меняться          gFrom=from;          to.alpha=0;          from.alpha=1;          ti.addEventListener(TimerEvent.TIMER,winCh);//визуализация эффекта          ti.start();        }     public function winCh(event: TimerEvent): void     {         gFrom.alpha-=0.02; //меняем прозрачность, тут можно сделать другие значения для более быстрой         gTo.alpha+=0.02; //или медленной смены. Так же в этой функции можно задать вращение, изменение         //размеров и т.п.         if (gTo.alpha>0.99) //как признак окончания отработки эффекта          GlobalContainer.setChildIndex(gTo,GlobalContainer.numChildren-1);//выводим наверх целевое окно     }        }} 
xenreal
Сообщения: 33
Зарегистрирован: 29 ноя 2010, 16:39

Re: Спешу поделиться идеей по созданию многооконного приложения

Сообщение xenreal »

А свой класс Button выложить можешь? без него не компилируется
AlexB
Сообщения: 12
Зарегистрирован: 02 дек 2010, 01:13

Re: Спешу поделиться идеей по созданию многооконного приложения

Сообщение AlexB »

Button - стандартный. Попробуй добавить на кадр Button, а потом удалить его - чтобы библиотека подтянулась.
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Спешу поделиться идеей по созданию многооконного приложения

Сообщение Alazaur »

AlexB писал(а):Если не писать в кадрах, то создание нескольких кадров и переход между ними по кликам - не подходит.
Хммм... а не объясните почему?
Ответить