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

Уроки по PHP, Javascript и т.п.

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

Сообщение AlexB » 23 дек 2010, 14:51

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

  1.  
  2. package
  3. {
  4.     import flash.display.*;
  5.     import flash.events.*;
  6.     import fl.controls.*;
  7.     import flash.utils.Timer;
  8.     import flash.sampler.Sample;
  9.     import flash.text.TextField;
  10.            
  11.     public class Main extends Sprite
  12.     {
  13.         private var winusr:Sprite=new Sprite(); //Создаем окна
  14.         private var winfr:Sprite=new Sprite();
  15.         private var winset:Sprite=new Sprite();
  16.         private var winblock:Sprite=new Sprite();//Прозрачное окно, которе блокирует действия при отработке визуального эффекта
  17.         private var gFrom: Sprite; //Указатели на окна для визуального эффекта
  18.         private var gTo: Sprite;
  19.         private var GlobalContainer: Object=new Object();//Создаем объект, в котором будем создавать окна
  20.                                                         //с контейнером будет wrapper, без - GlobalContainer   
  21.        
  22.         public function Main():void
  23.         {
  24.             var btnusr: Button=new Button; //Создаем кнопки
  25.             var btnfr: Button=new Button;
  26.             var btnset: Button=new Button;
  27.             var btnblock: Button=new Button;
  28.            
  29.             GlobalContainer=stage; //поскольку пример без контейнера
  30.  
  31.             btnusr.label='User';
  32.             btnfr.label='Friend';
  33.             btnset.label='Settings';
  34.             btnblock.label='Block';
  35.            
  36.             PlaceBtn(winusr, btnusr);           //Размещаем кнопки в окна
  37.             PlaceBtn(winfr, btnfr);             //тут можно прописать различные функции вида
  38.             PlaceBtn(winset, btnset);           //CreateUsrWin, CreateFriendWin и т.п.
  39.             PlaceBtn(winblock, btnblock);          
  40.            
  41.                    
  42.             winusr.alpha=1;  //Выводим первое окно, остальные делаем непрозрачными
  43.             winfr.alpha=0;
  44.             winset.alpha=0;
  45.             winblock.alpha=0;
  46.            
  47.             GlobalContainer.addChild(winusr); //Добавляем на сцену окна, при использовании контейнера
  48.             GlobalContainer.addChild(winfr);  //заменяем
  49.             GlobalContainer.addChild(winset);
  50.             GlobalContainer.addChild(winblock);
  51.  
  52.             SetPos(winusr); //Позиционируем окна в контейнере. Можно делать несколько функций, например,
  53.             SetPos(winfr);  //для основных окон SetWin, для диалогов - SetDlg
  54.             SetPos(winset);
  55.             SetPos(winblock);
  56.            
  57.            
  58.         GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);//Выводим наверх блокирующее окно
  59.         GlobalContainer.setChildIndex(winusr,GlobalContainer.numChildren-1);//Выводим наверх первое окно
  60.             //теперь блокирующее окно - у нас находится сразу под ним
  61.            
  62.             btnusr.addEventListener(MouseEvent.CLICK,usrClick);
  63.             btnfr.addEventListener(MouseEvent.CLICK,frClick);
  64.             btnset.addEventListener(MouseEvent.CLICK,setClick);
  65.  
  66.         }
  67.        
  68.        public function usrClick(event: MouseEvent): void
  69.        {
  70.           //Блокируем клики по всем объектам - выводим наверх прозрачное окно с кнопкой без обработчка
  71.           //кнопка - в размер всего окна
  72.           GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);
  73.           //вызываем функцию смены окна
  74.           winChange(winusr, winfr);
  75.        }
  76.        
  77.        public function frClick(event: MouseEvent): void
  78.        {
  79.           GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);
  80.            winChange(winfr, winset);
  81.        }
  82.        
  83.        public function setClick(event: MouseEvent): void
  84.        {
  85.           GlobalContainer.setChildIndex(winblock,GlobalContainer.numChildren-1);
  86.            winChange(winset, winusr);
  87.        }
  88.        
  89.        public function SetPos(obj: Sprite): void
  90.        {
  91.            obj.width=807;
  92.            obj.height=730;
  93.            obj.x=0;
  94.            obj.y=0;
  95.        }
  96.  
  97.       public function PlaceBtn(prnt: Sprite, btn: Button): void
  98.        {
  99.          if (btn.label=='Block'){ //если блокирующая кнопка - делаем в размер всего окна
  100.            prnt.addChild(btn);
  101.            btn.x=prnt.x;
  102.            btn.y=prnt.y;
  103.            btn.width=prnt.width;
  104.            btn.height=prnt.height;
  105.          }else{
  106.            prnt.addChild(btn);
  107.            btn.x=10;
  108.            btn.y=10;
  109.            btn.width=60;
  110.            btn.height=20;
  111.          }
  112.        }
  113.        
  114.  
  115.     public function winChange(from: Sprite, to: Sprite): void
  116.       {
  117.           var ti: Timer=new Timer(1,51); //Задаем таймер для создания визуального эффекта
  118.           gTo=to; //присваиваем указателем, какие окна будут меняться
  119.           gFrom=from;
  120.           to.alpha=0;
  121.           from.alpha=1;
  122.           ti.addEventListener(TimerEvent.TIMER,winCh);//визуализация эффекта
  123.           ti.start();
  124.  
  125.       }
  126.  
  127.     public function winCh(event: TimerEvent): void
  128.      {
  129.          gFrom.alpha-=0.02; //меняем прозрачность, тут можно сделать другие значения для более быстрой
  130.          gTo.alpha+=0.02; //или медленной смены. Так же в этой функции можно задать вращение, изменение
  131.          //размеров и т.п.
  132.          if (gTo.alpha>0.99) //как признак окончания отработки эффекта
  133.           GlobalContainer.setChildIndex(gTo,GlobalContainer.numChildren-1);//выводим наверх целевое окно
  134.      }
  135.  
  136.      
  137.  
  138. }
  139. }
  140.  
AlexB

 
Автор темы
Сообщения: 12
Зарегистрирован: 02 дек 2010, 01:13
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение xenreal » 23 дек 2010, 18:17

А свой класс Button выложить можешь? без него не компилируется
xenreal

 
Сообщения: 33
Зарегистрирован: 29 ноя 2010, 16:39
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

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

Сообщение AlexB » 23 дек 2010, 19:36

Button - стандартный. Попробуй добавить на кадр Button, а потом удалить его - чтобы библиотека подтянулась.
AlexB

 
Автор темы
Сообщения: 12
Зарегистрирован: 02 дек 2010, 01:13
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

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

Сообщение Alazaur » 16 окт 2011, 20:33

AlexB писал(а):Если не писать в кадрах, то создание нескольких кадров и переход между ними по кликам - не подходит.

Хммм... а не объясните почему?
Alazaur
Разработчик
Разработчик
 
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25
Благодарил (а): 24 раз.
Поблагодарили: 121 раз.


Вернуться в Уроки на другие темы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron