![]() |
|
||||||||||
|
|||||
|
Доброго вечера,
возник такой вопрос, создаю мувиклип в котором потом дублирую клипы, имя мувиклипу передаю через параметр функции, но, когда я два раза вызываю функцию и передаю ей скажем имена menu1 и menu2 то создается на сцене только menu2 подскажите в чем проблема плиз. код: ....
function buildMenu() {
_root.createEmptyMovieClip(mName, this.getNextHighestDepth());
eval(mName)._x = mX;
eval(mName)._y = mY;
eval(mName).opaqueBackground = 0xCCCCCC;
var i:Number;
for( i = 0; i < bCount; i++) {
eval(mName).attachMovie(iClip, "menuItem_" + i, i);
currentItem = eval(mName)["menuItem_"+i];
currentItem.itemName = iLabel[i];
...
|
|
|||||
|
во первых у тебя в функцию ничего не передается - чтоб передавалось она должна выглядеть так:
function buildMenu(myName) {... во вторых не используй eval - пиши так: noo = _root.createEmptyMovieClip(iname, depth) и дальше работай с noo |
|
|||||
|
Цитата:
может так будет понятней 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;
}
|
|
|||||
|
я думаю что проблема вот в чем, только пока безпонятия как ее решить
![]() я трэйсил переменную с именем которой создается emptyMovieClip.. и оказалось что код игнорирует первую переменную при вызове функции образом zMenu('name1', 'xml1' ...... ); zMenu('name2', 'xml1' ...... ); трайс выдает только name2 в обоих случаях... т.е. как я понял обрабатывает только второй вызов. как можно избежать такой ошибки ? за одно хотел спросить как можно избежать того что код выполняется раньше чем считывается XML и пришлось сделать проверку на флжок, как видно предоставленном коде. как сказали в детском фильме "я только учусь" Smile |
|
|||||
|
Ветеран форума
|
Попробуй может в этом проблема
__________________
BestMasterиZация |
|
|||||
|
Цитата:
xml отрабатыает нужное колво раз.. а вот два меню не строит.. |
|
|||||
|
Ветеран форума
|
Гдето ты что то делаешь не так ... разбираться в твоём коде неохота, да и времени нет, посиди ещё раз везде всё протрейси и посмотри что к чему ...
__________________
BestMasterиZация |
|
|||||
|
Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
|
мда, была, аналогичная проблема...решил ее так...когда все загружено подгружено целиком, начинал только после этого обрабатывать....т.е. такой алгоритм подгрузил обработал , подгрузил обработал, почему то пропускал первый элемент хоть убей :=)
|
|
|||||
|
что-то подсказывает мне, что _root.createEmptyMovieClip(mName, this.getNextHighestDepth()); this.getNextHighestDepth() не имеет отношения к _root, вот и создаются твои мувы на одинаковой глубине. При этом ессесно второй замещает первый.
|
|
|||||
|
Ветеран форума
|
Цитата:
__________________
BestMasterиZация |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|