Суть такая, часто нужно сделать приложение с несколькими "окнами". Если не писать в кадрах, то создание нескольких кадров и переход между ними по кликам - не подходит. В таком случае, имхо, можно сделать несколько контейнеров (по сути - окна), в которых и будем размещать весь пользовательский интерфейс. В данном примере, создается три окна, в каждом по одной кнопке. При нажатии на кнопку - переход к следующему окну с неким визуальным эффект. Собственно, вот листинг:
Код: Выделить всё
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);//выводим наверх целевое окно } }}