динамическое меню @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 6 ] 
*   Список форумов / Технологии изображения / Flash » ответить » создать топик « | »
Автор Сообщение
Reijii Муж.
новый человек
0
Сообщения: 137
Зарегистрирован: 10.02.05
Заголовок сообщения: динамическое меню
Сообщение Добавлено: 6 Декабрь 2005, 10:53:41 
Доброго утра,

возник такой вопрос, создаю мувиклип в котором потом дублирую клипы, имя мувиклипу передаю через параметр функции, но, когда я два раза вызываю функцию и передаю ей скажем имена menu1 и menu2
то создается на сцене только menu2

подскажите в чем проблема плиз.
код:

Код:
      var iClip:String;
      var iXML:String;
      var mX:Number;
      var mY:Number;
      var iSpace:Number;
      var vLayout:Boolean;
      var mName:String;
      
      var iLabel = new Array();    
      var bCount:Number;

function zMenu(menuName:String, itemClip:String, itemLabelXML:String, xPos:Number, yPos:Number, itemSpace:Number, vertLayout:Boolean) {
   
      iClip = itemClip;
      mName = menuName;
      iXML = itemLabelXML;
      mX = xPos;
      mY = yPos;
      iSpace = itemSpace;
      vLayout = vertLayout;

      System.useCodepage = false;
      
      if (checkParam(iClip, iXML)) {                        
         loadXML(iXML);
      } else {
      }
}
/* проверка входящих параметров */
function checkParam(clp:String, xml:String):Boolean {
   var fl:Boolean;
   
   if ((!clp) || (!xml) || (!mName)) {
      trace('Забыли задать параметр!')
      fl = false;
   } else {
      fl = true;
   }
   return fl;
}
/* считываем XML */
function loadXML(xml:String){
   var lang = new XML ();
   var flg:Number;
   
   lang.load (xml);
   lang.ignoreWhite = true;

   lang.onLoad = function (success) {
      lang = lang.firstChild;
      var len:Number = lang.childNodes.length;
      bCount = len;
   
      for (var i=0;i<len;i++)   {      
         iLabel[i] = lang.childNodes[i].firstChild.toString();
      }
      buildMenu();
   }
}
/* строим меню */
function buildMenu() {
   
   nm = _root.createEmptyMovieClip(mName, this.getNextHighestDepth());
   nm._x = mX;
   nm._y = mY;
   nm.opaqueBackground = 0xCCCCCC;

   
   var i:Number;
   
   for( i = 0; i < bCount; i++) {
      nm.attachMovie(iClip, "menuItem_" + i, i);
      currentItem = nm["menuItem_"+i];
      currentItem.itemName = iLabel[i];
      
      if(i != 0) {
         if (vLayout) {
            prevItem = nm["menuItem_" + (i - 1)];
            currentItem._y = prevItem._y + prevItem._height + iSpace;
         } else {
            prevItem = nm["menuItem_" + (i - 1)];
            currentItem._x = prevItem._x + prevItem._width + iSpace;
         }
      }
   }
   nm.menuItem._visible = false;         
}
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 6 Декабрь 2005, 11:09:04 
чувак - ты реально думаешь что чем больше ты кода выложишь тем проще будет в нем разробраться? у тебя все создается только на одних и тех же координатах. вот попробуй хотя бы так -
currentItem._y = i*currentItem._height

_________________
Здравствуй, Олимпийский!
Reijii Муж.
новый человек
0
Сообщения: 137
Зарегистрирован: 10.02.05
Сообщение Добавлено: 6 Декабрь 2005, 12:16:17 

Король писал(а):
чувак - ты реально думаешь что чем больше ты кода выложишь тем проще будет в нем разробраться? у тебя все создается только на одних и тех же координатах. вот попробуй хотя бы так -
currentItem._y = i*currentItem._height



насчет кода, я так не думаю, просто на одном форуме размещал только ф-цию отвечающую за создание, там оказалось мало :) больше не буду так постить..

насчет координат, то все отрабатывает нормально, я думаю что проблема вот в чем,
я трэйсил переменную с именем которой создается emptyMovieClip.. и оказалось что код игнорирует первую переменную при вызове функции
образом
zMenu('name1', 'xml1' …… );
zMenu('name2', 'xml1' …… );

трайс выдает только name2 в обоих случаях... т.е. как я понял обрабатывает только второй вызов. как можно избежать такой ошибки ?
за одно хотел спросить как можно избежать того что код выполняется раньше чем считывается XML и пришлось сделать проверку на флжок, как видно предоставленном коде.

как сказали в детском фильме
"я только учусь" :)
_iv Муж.
Модератор
32
Сообщения: 166
Зарегистрирован: 26.10.05
Откуда: Москва
Сообщение Добавлено: 7 Декабрь 2005, 16:56:03 
возможная ошибка кроется здесь:
_root.createEmptyMovieClip(mName, this.getNextHighestDepth());

ты создаешь мувик в руте, а берешь глубину из другого места.
соответственно глубина одна и та же, и новые мувики замещают старые.

правильно так:
_root.createEmptyMovieClip(mName, _root.getNextHighestDepth());
Reijii Муж.
новый человек
0
Сообщения: 137
Зарегистрирован: 10.02.05
Сообщение Добавлено: 8 Декабрь 2005, 14:49:13 

_iv писал(а):
возможная ошибка кроется здесь:
_root.createEmptyMovieClip(mName, this.getNextHighestDepth());

ты создаешь мувик в руте, а берешь глубину из другого места.
соответственно глубина одна и та же, и новые мувики замещают старые.

правильно так:
_root.createEmptyMovieClip(mName, _root.getNextHighestDepth());



пробовал :(

я думаю что проблема вот в чем, только пока безпонятия как ее решить
я трэйсил переменную с именем которой создается emptyMovieClip.. и оказалось что код игнорирует первую переменную при вызове функции
образом
zMenu('name1', 'xml1' …… );
zMenu('name2', 'xml1' …… );

трайс выдает только name2 в обоих случаях... т.е. как я понял обрабатывает только второй вызов. как можно избежать такой ошибки ?
за одно хотел спросить как можно избежать того что код выполняется раньше чем считывается XML и пришлось сделать проверку на флжок, как видно предоставленном коде.
_iv Муж.
Модератор
32
Сообщения: 166
Зарегистрирован: 26.10.05
Откуда: Москва
Сообщение Добавлено: 12 Декабрь 2005, 11:15:11 
напиши плз что получится если вставить такие трейсы:

1) в конструкторе первой строкой:
trace(arguments)

2)в buildMenu
после строки
nm = _root.createEmptyMovieClip
trace(nm+" d:"+nm.getDepth())

или
вышли мне исходники, я гляну.

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


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