програмная анимация меню @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 5 ] 
*   Список форумов / Технологии изображения / Flash » ответить » создать топик « | »
Автор Сообщение
ulitin kirill
постоянный участник
92
Сообщения: 2844
Зарегистрирован: 17.07.05
Откуда: Санкт-Петербург
Заголовок сообщения: програмная анимация меню
Сообщение Добавлено: 24 Декабрь 2007, 15:22:42 
Такой вопрос, сам догнать не могу, прошу помощи.

Далее приведу упрощенный код, где опускаю все ненужные моменты

Итак есть программное меню:

Код:

ShowMC = function (curr_menu) {
   curr_menu.onEnterFrame = function() {
      if (curr_menu._alpha<=100) {
         curr_menu._alpha += 5;
      }
   };
};

HideMC = function (curr_menu) {
   curr_menu.onEnterFrame = function() {
      if (curr_menu._alpha>=0) {
         curr_menu._alpha -= 5;
      } else {
         ShowMC(curr_menu);
      }
   };
};

//-----------------------------------------------------------

GenerateMenu = function (container, name, x, y, depth, type, node_xml) {
   // объявили переменные

   if (this[name]) { //если мувик под меню уже создан
      var curr_menu = this[name];
      HideMC(curr_menu);
   } else { //если меню несоздано
      var curr_menu = container.createEmptyMovieClip(name, depth);
      curr_menu._alpha = 0;
      ShowMC(curr_menu);
   }

      for (var i = 0; i<node_xml.childNodes.length; i++) {
         фигачим пункты меню и вешаем на них события итд
      }

};

CreateMainMenu = function (x, y, depth, menu_xml) {
   GenerateMenu(this,"mainmenu_mc",x,y,depth,"top",menu_xml.firstChild);
};


CreateMainMenu(globalPos("topMenuX"),globalPos("topMenuY"),0,data);




Проблема в том, что если меню уже создано и на его месте надо показать другое меню с новыми пунктами,
то я хочу что бы сначала уходило в прозрачность старое меню, а затем появлялось новое.

У меня же когда запускается функция GenerateMenu, то старое меню пропадает, а на его месте появляется новое, затем оно гасится и появляется, то есть функция HideMC выполняется уже после того как меню сменилось.

Почему это происходит я понимаю, тк мувик с меню один, то
этот цикл успевает выполнится до того, как выполнится функция HideMC

Код:
for (var i = 0; i<node_xml.childNodes.length; i++) {
         фигачим пункты меню и вешаем на них события итд
      }


Вопрос в том как заставить этот цикл обождать пока генерируемое меню curr_menu._apha уйдет до нуля?

_________________
хочу лето, очень.
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 24 Декабрь 2007, 18:41:05 
Вам нужно добавить события и все будет просто. К примеру, на сцене два клипа: clip1 и clip2

Код:
   hideClip1();
   
   function hideClip1()
   {
      hide(clip1, hideClip2);
   }
   
   function hideClip2()
   {
      hide(clip2, null);
   }
   
   function hide(clip, callback)
   {
      clip.onEnterFrame = function()
      {
         if(this._alpha > 0)
         {
             this._alpha -= 5;
         }
         else
         {
              this._alpha = 0;
            this.onEnterFrame = null;
            callback();
         }
      }
   }
ulitin kirill
постоянный участник
92
Сообщения: 2844
Зарегистрирован: 17.07.05
Откуда: Санкт-Петербург
Сообщение Добавлено: 24 Декабрь 2007, 20:08:01 
@st@l@vist@, я кажется понял вашу идею, действительно инициировать анимацию меню непосредственно в самой функции, которая это меню строит глупо, а вот если вызывать функцию построения меню через функцию, которая сначала скроет это меню, а потом уже вызовет функцию построения меню, будет то что нужно. Спасибо, буду пробовать.

_________________
хочу лето, очень.
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 24 Декабрь 2007, 21:49:59 
Чего тут думать? … вот ваш случай :)

Код:
   import mx.transitions.Tween;
   import mx.transitions.easing.*;

   var menu = null;
   var tween = null;
   var onMouseDown = showMenu;

   function createMenu()
   {
      var d = getNextHighestDepth();
      var m = createEmptyMovieClip("menu_" + d, d);
         m._x = Math.random() * 500;
         m._y = Math.random() * 300;
         m.beginFill(Math.floor(Math.random() * 0xFFFFFF));
         m.lineTo(100, 0);
         m.lineTo(100, 100);
         m.lineTo(0, 100);
         m.lineTo(0, 0);
         m.endFill();
         
      return m;
   }
   
   function showMenu()
   {
      if(MovieClip(menu))
      {
         tween.stop();
         tween = new Tween(menu, "_alpha", null, menu._alpha, 0, 10);
         tween.onMotionFinished = function()
         {
            menu.removeMovieClip();
            showMenu();
         }
      }
      else
      {
         menu = createMenu();
         tween = new Tween(menu, "_alpha", null, 0, 100, 10);
      }
   }
ulitin kirill
постоянный участник
92
Сообщения: 2844
Зарегистрирован: 17.07.05
Откуда: Санкт-Петербург
Сообщение Добавлено: 24 Декабрь 2007, 22:19:00 
@st@l@vist@, :beer:

_________________
хочу лето, очень.
*   Список форумов / Технологии изображения / Flash « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 5 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100