Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   createEmptyMovieClip (http://www.flasher.ru/forum/showthread.php?t=72859)

Reijii 05.12.2005 20:04

createEmptyMovieClip
 
Доброго вечера,

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

Цитата:

Сообщение от KUZEN
Попробуй может в этом проблема

Код:

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

Цитата:

Сообщение от Dimchansky
что-то подсказывает мне, что _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

Цитата:

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

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

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

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

Вложений: 1
Цитата:

Сообщение от KUZEN
А разве сюда выложить нельзя ...

да тормоз тоже механизм. :( прикрепил правда swf + xml
почемуто исходник весит 36 метров :(

motor4ik 07.12.2005 11:16

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

Reijii 07.12.2005 13:40

Цитата:

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

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


Часовой пояс GMT +4, время: 19:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.