Вход

Просмотр полной версии : createEmptyMovieClip


Reijii
05.12.2005, 20:04
Доброго вечера,

возник такой вопрос, создаю мувиклип в котором потом дублирую клипы, имя мувиклипу передаю через параметр функции, но, когда я два раза вызываю функцию и передаю ей скажем имена 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];
...

Король
05.12.2005, 21:11
во первых у тебя в функцию ничего не передается - чтоб передавалось она должна выглядеть так:
function buildMenu(myName) {...
во вторых не используй eval - пиши так:

noo = _root.createEmptyMovieClip(iname, depth)

и дальше работай с noo

Reijii
06.12.2005, 11:25
во первых у тебя в функцию ничего не передается - чтоб передавалось она должна выглядеть так:
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;
}

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

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

как сказали в детском фильме
"я только учусь" Smile

KUZEN
06.12.2005, 17:18
Попробуй может в этом проблема

lang.onLoad = function (success) {
if(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();
}
}

Reijii
06.12.2005, 17:37
Попробуй может в этом проблема

lang.onLoad = function (success) {
if(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();
}
}

к сожалению увы.. все равно подхватывает только последнее название..
xml отрабатыает нужное колво раз.. а вот два меню не строит..

KUZEN
06.12.2005, 17:40
Гдето ты что то делаешь не так ... разбираться в твоём коде неохота, да и времени нет, посиди ещё раз везде всё протрейси и посмотри что к чему ...

motor4ik
06.12.2005, 17:44
мда, была, аналогичная проблема...решил ее так...когда все загружено подгружено целиком, начинал только после этого обрабатывать....т.е. такой алгоритм подгрузил обработал , подгрузил обработал, почему то пропускал первый элемент хоть убей :=)

Dimchansky
06.12.2005, 18:45
что-то подсказывает мне, что _root.createEmptyMovieClip(mName, this.getNextHighestDepth()); this.getNextHighestDepth() не имеет отношения к _root, вот и создаются твои мувы на одинаковой глубине. При этом ессесно второй замещает первый.

KUZEN
06.12.2005, 18:47
что-то подсказывает мне, что _root.createEmptyMovieClip(mName, this.getNextHighestDepth()); this.getNextHighestDepth() не имеет отношения к _root, вот и создаются твои мувы на одинаковой глубине. При этом ессесно второй замещает первый.
Возможно если компилишь по 6-ку

Dimchansky
06.12.2005, 19:00
отчего же...
судя по коду - это класс с публичными методами.
в этом контексте this - указатель на объект-экземпляр класса, но никак не _root
this.getNextHighestDepth() не изменяется, ведь мувик-то создан не в this.

KUZEN
06.12.2005, 19:10
Функция лежит в руте так что указатель this будет равносилен _root

Dimchansky
06.12.2005, 19:20
приведенный код не полный, поэтому спорить не буду.
советую просто исправить this.getNextHighestDepth() на _root.getNextHighestDepth() и посмотреть, что из этого получится.

KUZEN
06.12.2005, 19:22
Наш спор вообще неуместен, потому как невидно полного исходника ;-)

Reijii
06.12.2005, 19:38
Наш спор вообще неуместен, потому как невидно полного исходника ;-)

исходник полный :)

вот как я вызываю функции:

stop();
zMenu('menu','button','zmenu.xml', 10, 10, 5, true);
zMenu('mu','button','zmenu.xml', 10, 200, 5, true);

menu, mu - названия emptyMovieClip
button - мувик из библиотеки
10,10 / 10,200 - координаты где будет emptyMovieClip
5 - расстояние между кнопками
true - вертикальное расположение при false горизонтальное

код в мувике из библиотеки
label.text = itemName;
stop();

собсно в мувике текстовое поле с именем label


xml:

<?xml version="1.0" encoding="UTF-8"?>
<zMenu>
<item link="lnk1">item 1</item>
<item link="lnk2">item 2</item>
<item link="lnk3">item 3</item>
<item link="lnk4">item 4</item>
<item link="lnk5">item 5</item>
</zMenu>


вот и все

прсто выложить некуда было
извините :(

KUZEN
06.12.2005, 19:39
А разве сюда выложить нельзя ...

Reijii
07.12.2005, 11:04
А разве сюда выложить нельзя ...
да тормоз тоже механизм. :( прикрепил правда swf + xml
почемуто исходник весит 36 метров :(

motor4ik
07.12.2005, 11:16
исходник - 36 метров?!!! фигассе :=) даже не могу предположить как такое может быть, из-за чего :=)

Reijii
07.12.2005, 13:40
исходник - 36 метров?!!! фигассе :=) даже не могу предположить как такое может быть, из-за чего :=)

мне тоже оч интерестно, с учетом что в исходнике кроме кода что указан тут в постах и одного мувиклива состоящего из текстового поля и заливочки ниче нету )