Форум 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)
-   -   XML и loadMovie (http://www.flasher.ru/forum/showthread.php?t=114006)

M.™ 16.07.2008 13:18

XML и loadMovie
 
Вложений: 1
Привет всем....
Вот столкнулся с проблемой....не могу решить....
Есть флэшка, котороя загружает в себя с внешки другую флэшку....котороя та в свою очередь является галереей и тоже загружает картинки с внешки...
Всё вместе выбивает ошибку....
обычный Swf проект загружает, а вот галерею не хочет...
или для загрузки галереи работающей с XML, нужно загружать какими то другими способами...???
исходник прилагается...
Заранее спасибо....

iNils 16.07.2008 13:35

Есть флешка X и Y, у каждой есть библиотека libX и libY.
При загрузке в X флешки Y, флешка X не имеет доступа к библиотеки libY, а флешка Y не имеет доступа к библиотеки libX.

У вас в подгружаемой флешке есть код
Код:

_root.attachMovie("ccImageGallery",...
Он и создает проблему. Если раньше _root указывал на корень Y, то после загрузки в другую флешку он указывает на корень X, а аттачится символ из библиотеки libY.
Поэтому надо отказаться от абсолютной адресации в виде _root и использовать относительную this

Alex_beginner 16.07.2008 13:39

Цитата:

Он и создает проблему. Если раньше _root указывал на корень Y, то после загрузки в другую флешку он указывает на корень X, а аттачится символ из библиотеки libY.
iNils! А можно ли использовать _lockroot?

iNils 16.07.2008 13:42

Можно. Но если есть возможность изменить код в исходнике, то лучше поменять на this.

M.™ 16.07.2008 15:01

iNils, т.е. это типо я должен заменить в галереи _root на this...???

crazyone 16.07.2008 15:13

Цитата:

Сообщение от iNils (Сообщение 752375)
Можно. Но если есть возможность изменить код в исходнике, то лучше поменять на this.

А вот этому мне бы хотелось прочитать обоснование. Пожалуйста.

iNils 16.07.2008 15:25

Как минимум, у меня, между прочим, нет исходника Vacation1.swf :D

Цитата:

Сообщение от crazyone (Сообщение 752409)
А вот этому мне бы хотелось прочитать обоснование. Пожалуйста.

1. _lockroot в первую очередь предназначен для сохранения работоспособности старых флешек, в которых использовался _root, а исходника нет чтобы исправить, либо число исходников слишком велико.
2. _lockroot подменяет _root даже тогда, когда нужен _root корневого клипа. Хотя в таких случаях лучше использовать _levelN
3. Мною был замечен баг в сочетании _root, _lockroot и вызов unloadMovie через call/apply (выгружалось абсолютно все)

Глобально - _lockroot дает неоднозначное поведение _root в различных ситуациях, так зачем создавать возможность появления проблем, когда их можно вообще избежать?

M.™ 16.07.2008 15:33

iNils, извени если что...только у всё равно ничего не выходит, если тебе не трудно можешь мне исправить ошибки в моих исходниках...???
заранее спасибо...

iNils 16.07.2008 15:36

Еще раз повторяю, у меня нет исходника Vacation1

M.™ 16.07.2008 15:40

Вложений: 1
на ту галерею у меня исходника нет....
тут другая немного галерея...

iNils 16.07.2008 15:51

Вложений: 1
Держите

M.™ 16.07.2008 16:04

iNils, вы уж извините меня....но тут 2 файла....и никакого движения....у меня ничего не работает....одно окно открывается в сером фоне, а другое в белом....

iNils 16.07.2008 16:08

В архиве только измененные исходники, без контента.
Размеры экрана, фпс и цвет фона при загрузке не изменяются. Поэтому серый фон нужно также создавать в основном ролике, либо в подгружаемом класть внизу нарисованный прямоугольник нужного цвета.

M.™ 16.07.2008 16:11

а там не исходники....там готовые работы....

iNils 16.07.2008 16:16

Точно. Перезалил.

crazyone 16.07.2008 16:25

Цитата:

Сообщение от iNils (Сообщение 752414)
1. _lockroot в первую очередь предназначен для сохранения работоспособности старых флешек, в которых использовался _root, а исходника нет чтобы исправить, либо число исходников слишком велико.
2. _lockroot подменяет _root даже тогда, когда нужен _root корневого клипа. Хотя в таких случаях лучше использовать _levelN
3. Мною был замечен баг в сочетании _root, _lockroot и вызов unloadMovie через call/apply (выгружалось абсолютно все)

Занятно. Не знал, спасибо.

M.™ 16.07.2008 16:38

iNils, огромное спасибо....))))
есть у меня вопрос по галереи....можно ли сделать чтобы при наведении на картинку она увеличивалась....это одно...т.е. всё так же должно работать как щас только при наведении на картинку она увеличивалась, как я понял там в скрипте есть такое свойство....но почему то не работает....
а второе чтобы при нажатии на картинку, т.е. тоже всё так же....только при нажатии на картинку загружался какой то новый фрэйм...т.е. чтобы галерейные картинки загружались как или под видом кнопок.
я наверное слишком много прошу...((((

M.™ 19.07.2008 16:53

Вложений: 1
to iNils,
здравствуй ещё раз....
у меня тут ещё одна галерея, я всё таки и не понял что ты сделал в прошлой....можешь мне по подробнее рассказать что ты меняешь в скрипте...я так и не понял....и поменяй пожалуйста и в этой галереи....
Заранее спасибо...
:rolleyes:

iNils 19.07.2008 18:06

Эээ, так дело не пойдет. Все, что нужно, я описал еще во втором сообщении данной темы. Бегать и править все ваши исходники я не собираюсь. Учитесь.

M.™ 19.07.2008 19:12

iNils,
Смотрел Ваши изменения в прошлой галереи, заметил там много изменений, но не только _root, но и в самих алгоритмах, мучаюсь уже 2-й день и никак не могу их разобрать...
пожалуйста, очень Вас прошу, я никак не могу разобраться со скриптом, это последняя просьба будет, дальше я сам....

iNils 19.07.2008 19:28

Цитата:

Сообщение от M.™ (Сообщение 753111)
Смотрел Ваши изменения в прошлой галереи, заметил там много изменений, но не только _root, но и в самих алгоритмах

Даже так? Тогда я точно не могу ничем помочь, я только this менял, остальное наверно инопланетяне поменяли.

M.™ 19.07.2008 22:47

мдя....
не веришь вот доказательство:
вот скрипт, что что был...
Код:

var xmlFile:String = "test.xml";// адрес файла основного XML
var img_folderURL:String = "";// адрес папки с картинками, будет читаться из XML
var photoset:Object = new Object();// будет хранить все данные о странице
photoset.maxCellHeight = 0;
photoset.pics = 0;
var imgNameFormat:TextFormat = new TextFormat();// формат подписей к картинкам
imgNameFormat.font = "Arial";
imgNameFormat.size = 12;
imgNameFormat.indent = 2;
// Задаем параметры сцены, чтобы обеспечить реакцию на ресайз флэшки
Stage.showMenu = false;
Stage.scaleMode = "noScale";
Stage.align = "TL";
Stage.addListener(this);
this.onResize = align;
// * * * * * * *  Ч Т Е Н И Е  X M L  * * * * * * * * *
function parsing(pageXML:XML) {
        // XML загружен, создаем страницу галереи
        var page:MovieClip = _root.createEmptyMovieClip("page_mc", 10);
        page._x=10, page._y=45;
        // вытаскиваем узел, с которым будем дальше работать
        // pageXML.firstChild - это корневой узел 'show'
        // pageXML.firstChild.firstChild - нужный нам узел 'page'
        var imageList:XMLNode = pageXML.firstChild.firstChild;
        // считываем данные об адресе папки с картинками
        img_folderURL = imageList.attributes.imageFolder;
        // считываем данные о странице
        var pagenum:String = imageList.attributes.pageNum;
        var pagetitle:String = imageList.attributes.pageTitle;
        // выводим заголовок
        var title_mc:MovieClip = _root.createEmptyMovieClip("title_mc", 20);
        var title_txt:TextField = title_mc.createTextField("title_txt", 1, 0, 0, Stage.width, 35);
        var titleFormat:TextFormat = new TextFormat();
        titleFormat.font = "Trebuchet MS";
        titleFormat.bold = true;
        titleFormat.size = 24;
        title_txt.text = pagenum+".  "+pagetitle;
        title_txt.autoSize = true;
        title_txt.multiline = true;
        title_txt.selectable = false;// опционально
        title_txt.textColor = 0xaaaaaa;
        title_txt.setTextFormat(titleFormat);
        title_mc.lineStyle(1,0x666666);
        title_mc.moveTo(5,title_txt._height);
        title_mc.lineTo(Stage.width-5,title_txt._height);
        // парсим список картинок в массив нодов
        var arr:Array = imageList.childNodes;
        photoset.pics = arr.length;
        // начинаем просмотр массива
        for (i=0; i<arr.length; i++) {
                var currentNode:XMLNode = arr[i];
                // считываем данные о текущей картинке
                pic = img_folderURL+currentNode.attributes.pic;
                titul = currentNode.attributes.titul;
                hint = currentNode.attributes.hint;
                link = img_folderURL+currentNode.attributes.big;
                // вызываем функцию, загружающую превью и формирующую слайд
                loadPic(i,pic,hint,titul,link);
        }
}
sourceXML = new XML();
sourceXML.ignoreWhite = true;
sourceXML.load(xmlFile);
sourceXML.onLoad = function(success) {
        success ? parsing(this) : title_mc.title_txt.text="LET'S PANIC NOW: XML DATA NOT LOADED!!!";
};
// * * * * * * * * *  Г Р У З И М  К А Р Т И Н К И  * * * * * * * * * * * * * *
function loadPic(i:Number, pic:String, hint:String, titul:String, link:String) {
        var mc:MovieClip = page_mc.createEmptyMovieClip("image"+i, i);
        var mc_pic:MovieClip = mc.createEmptyMovieClip("pic", 2);
        var mcLoader:MovieClipLoader = new MovieClipLoader();
        var mcListener:Object = new Object();
        mcLoader.addListener(mcListener);
        mcListener.onLoadInit = function(mc_pic) {
                mc = mc_pic._parent;
                mc.hint = hint;
                mc.titul = titul;
                mc.link = link;
                formatCell(mc);
                align();
                mc.onRollOver = imgOver;
                mc.onRollOut = imgOut;
                mc.onPress = imgPress;
        };
        mcLoader.loadClip(pic,mc_pic);

}
// * * * * * * * * * * *  Ф О Р М А Т И Р У Е М  Я Ч Е Й К У  * * * * * * * * *
function formatCell(mc:MovieClip) {
        // создаем подпись
        var imgtitle:TextField = mc.createTextField("name_txt", 10, 0, mc._height+5, mc.mc_pic._width, 20);
        imgtitle.autoSize = true;
        imgtitle.multiline = true;
        imgtitle.wordWrap = true;
        imgtitle.text = mc.titul;
        imgtitle.textColor = 0x888888;
        imgtitle._width = mc._width;
        imgtitle.setTextFormat(imgNameFormat);
        // создаем рамку
        var ramka:MovieClip = mc.createEmptyMovieClip("r", 0);
        with (ramka) {
                h = mc._height+3;
                w = mc._width+3
                lineStyle(0,0x505050);
                beginFill(0x404040,100);
                moveTo(0,0);
                lineTo(w,0);
                lineTo(w,h);
                lineTo(0,h);
                lineTo(0,0);
                endFill();
                _visible = 0
        };
        mc.pic._x = mc.pic._y=2;
}
// * * * * * * * * * * * * * *  К Н О П О Ч Н Ы Е  С О Б Ы Т И Я  * * * * * * *
function imgOver() {
        this.r._visible = true;
        this.name_txt.textColor = 0xcccccc;
        viewHint(this);
}
function imgOut() {
        this.r._visible = false;
        this.name_txt.textColor = 0x888888;
        closeHint()
}
function imgPress() {
        trace("Загружаем большую картинку "+this.link)
}
// * * * * * * * * *  П О К А З Ы В А Е М  П О Д С К А З К И  * * * * * * * * *
function viewHint(mc:MovieClip){
        hint_list = _root.createTextField("hint_list",_root.getNextHighestDepth(),_xmouse+2,_ymouse+1,50,10);
        hint_list.selectable = false
        hint_list.border = true;
        hint_list.borderColor = 0x505050
        hint_list.background = true;
        hint_list.backgroundColor = 0x404040;
        hint_list.text = "    "+mc.hint;
        hint_list.textColor = 0xaaaaaa;
        hint_list.setTextFormat(imgNameFormat);
        hint_list._width = hint_list.textWidth + 10;
        hint_list._height = hint_list.textHeight + 4;
        mc.onMouseMove = function () {
                hint_list._x = _xmouse+2;
                hint_list._y = _ymouse+1;
                updateAfterEvent();
        }
};
function closeHint(){
        _root.hint_list.removeTextField();
}
// * * * * * * * * *  В Ы С Т Р А И В А Е М  П О Р Я Д О К  * * * * * * * * *
function align() {
        for (k=0; k<photoset.pics; k++) {
                prex = page_mc["image"+(k-1)];
                curent = page_mc["image"+k];
                photoset.maxCellHeight = Math.max(photoset.maxCellHeight, curent._height);
                curent.r._height = photoset.maxCellHeight;
                curent._x = prex._x+prex._width+10;
                curent._y = prex._y;
                if ((curent._x+curent._width)>(Stage.width-10)) {
                        curent._x = 0;
                        curent._y += photoset.maxCellHeight+10;
                }
        }
}


M.™ 19.07.2008 22:48

А вот что стало, после твоей замене _root на this...
Код:

var xmlFile:String = "test.xml";
// адрес файла основного XML
var img_folderURL:String = "";
// адрес папки с картинками, будет читаться из XML
var photoset:Object = new Object ();
// будет хранить все данные о странице
photoset.maxCellHeight = 0;
photoset.pics = 0;
var imgNameFormat:TextFormat = new TextFormat ();
// формат подписей к картинкам
imgNameFormat.font = "Arial";
imgNameFormat.size = 12;
imgNameFormat.indent = 2;
// Задаем параметры сцены, чтобы обеспечить реакцию на ресайз флэшки
Stage.showMenu = false;
Stage.scaleMode = "noScale";
Stage.align = "TL";
Stage.addListener (this);
this.onResize = align;
// * * * * * * *  Ч Т Е Н И Е  X M L  * * * * * * * * *
function parsing (pageXML:XML) {
        // XML загружен, создаем страницу галереи
        var page:MovieClip = this.createEmptyMovieClip ("page_mc", 10);
        page._x = 10, page._y = 45;
        // вытаскиваем узел, с которым будем дальше работать
        // pageXML.firstChild - это корневой узел 'show'
        // pageXML.firstChild.firstChild - нужный нам узел 'page'
        var imageList:XMLNode = pageXML.firstChild.firstChild;
        // считываем данные об адресе папки с картинками
        img_folderURL = imageList.attributes.imageFolder;
        // считываем данные о странице
        var pagenum:String = imageList.attributes.pageNum;
        var pagetitle:String = imageList.attributes.pageTitle;
        // выводим заголовок
        var title_mc:MovieClip = this.createEmptyMovieClip ("title_mc", 20);
        var title_txt:TextField = title_mc.createTextField ("title_txt", 1, 0, 0, Stage.width, 35);
        var titleFormat:TextFormat = new TextFormat ();
        titleFormat.font = "Trebuchet MS";
        titleFormat.bold = true;
        titleFormat.size = 24;
        title_txt.text = pagenum + ".  " + pagetitle;
        title_txt.autoSize = true;
        title_txt.multiline = true;
        title_txt.selectable = false;
        // опционально
        title_txt.textColor = 0xaaaaaa;
        title_txt.setTextFormat (titleFormat);
        title_mc.lineStyle (1, 0x666666);
        title_mc.moveTo (5, title_txt._height);
        title_mc.lineTo (Stage.width - 5, title_txt._height);
        // парсим список картинок в массив нодов
        var arr:Array = imageList.childNodes;
        photoset.pics = arr.length;
        // начинаем просмотр массива
        for (i = 0; i < arr.length; i++) {
                var currentNode:XMLNode = arr[i];
                // считываем данные о текущей картинке
                pic = img_folderURL + currentNode.attributes.pic;
                titul = currentNode.attributes.titul;
                hint = currentNode.attributes.hint;
                link = img_folderURL + currentNode.attributes.big;
                // вызываем функцию, загружающую превью и формирующую слайд
                loadPic (i, pic, hint, titul, link);
        }
}
sourceXML = new XML ();
sourceXML.ignoreWhite = true;
sourceXML.load (xmlFile);
sourceXML.onLoad = function (success) {
        success ? parsing (this) : title_mc.title_txt.text = "LET'S PANIC NOW: XML DATA NOT LOADED!!!";
};
// * * * * * * * * *  Г Р У З И М  К А Р Т И Н К И  * * * * * * * * * * * * * *
function loadPic (i:Number, pic:String, hint:String, titul:String, link:String) {
        var mc:MovieClip = page_mc.createEmptyMovieClip ("image" + i, i);
        var mc_pic:MovieClip = mc.createEmptyMovieClip ("pic", 2);
        var mcLoader:MovieClipLoader = new MovieClipLoader ();
        var mcListener:Object = new Object ();
        mcLoader.addListener (mcListener);
        mcListener.onLoadInit = function (mc_pic) {
                mc = mc_pic._parent;
                mc.hint = hint;
                mc.titul = titul;
                mc.link = link;
                formatCell (mc);
                align ();
                mc.onRollOver = imgOver;
                mc.onRollOut = imgOut;
                mc.onPress = imgPress;
        };
        mcLoader.loadClip (pic, mc_pic);
}
// * * * * * * * * * * *  Ф О Р М А Т И Р У Е М  Я Ч Е Й К У  * * * * * * * * *
function formatCell (mc:MovieClip) {
        // создаем подпись
        var imgtitle:TextField = mc.createTextField ("name_txt", 10, 0, mc._height + 5, mc.mc_pic._width, 20);
        imgtitle.autoSize = true;
        imgtitle.multiline = true;
        imgtitle.wordWrap = true;
        imgtitle.text = mc.titul;
        imgtitle.textColor = 0x888888;
        imgtitle._width = mc._width;
        imgtitle.setTextFormat (imgNameFormat);
        // создаем рамку
        var ramka:MovieClip = mc.createEmptyMovieClip ("r", 0);
        with (ramka) {
                h = mc._height + 3;
                w = mc._width + 3;
                lineStyle (0, 0x505050);
                beginFill (0x404040, 100);
                moveTo (0, 0);
                lineTo (w, 0);
                lineTo (w, h);
                lineTo (0, h);
                lineTo (0, 0);
                endFill ();
                _visible = 0;
        }
        mc.pic._x = mc.pic._y = 2;
}
// * * * * * * * * * * * * * *  К Н О П О Ч Н Ы Е  С О Б Ы Т И Я  * * * * * * *
function imgOver () {
        this.r._visible = true;
        this.name_txt.textColor = 0xcccccc;
        viewHint (this);
}
function imgOut () {
        this.r._visible = false;
        this.name_txt.textColor = 0x888888;
        closeHint ();
}
function imgPress () {
        trace ("Загружаем большую картинку " + this.link);
}
// * * * * * * * * *  П О К А З Ы В А Е М  П О Д С К А З К И  * * * * * * * * *
function viewHint (mc:MovieClip) {
        hint_list = this.createTextField ("hint_list", this.getNextHighestDepth (), _xmouse + 2, _ymouse + 1, 50, 10);
        hint_list.selectable = false;
        hint_list.border = true;
        hint_list.borderColor = 0x505050;
        hint_list.background = true;
        hint_list.backgroundColor = 0x404040;
        hint_list.text = "    " + mc.hint;
        hint_list.textColor = 0xaaaaaa;
        hint_list.setTextFormat (imgNameFormat);
        hint_list._width = hint_list.textWidth + 10;
        hint_list._height = hint_list.textHeight + 4;
        mc.onMouseMove = function () {
                hint_list._x = _xmouse + 2;
                hint_list._y = _ymouse + 1;
                updateAfterEvent ();
        };
}
function closeHint () {
        this.hint_list.removeTextField ();
}
// * * * * * * * * *  В Ы С Т Р А И В А Е М  П О Р Я Д О К  * * * * * * * * *
function align () {
        for (k = 0; k < photoset.pics; k++) {
                prex = page_mc["image" + (k - 1)];
                curent = page_mc["image" + k];
                photoset.maxCellHeight = Math.max (photoset.maxCellHeight, curent._height);
                curent.r._height = photoset.maxCellHeight;
                curent._x = prex._x + prex._width + 10;
                curent._y = prex._y;
                if ((curent._x + curent._width) > (Stage.width - 10)) {
                        curent._x = 0;
                        curent._y += photoset.maxCellHeight + 10;
                }
        }
}

и не нужно делать из меня слепого....не хочешь помогать...так и скажи....

Wolsh 19.07.2008 23:06

M.™, Вы обиделись на iNilsa за то что он удалил часть моих комментариев? )))))))))))))
Не хотите учиться, хотите чтобы все делали за Вас - так и скажите.
Так Вам ведь сделали, Вы всё недовольны.

M.™ 19.07.2008 23:26

Вложений: 1
я доволен, начиная с того что мне вообще ответили....
Да в скриптах я не всё понимаю...я просто хотел если не трудно...обьяснить по подробнее в чём была проблема...а не просто сказать заменил _root на this, сколько раз менял ничего не получалось...а он сделал, сказал что только заменил, а результат совсем другой...
если тебе не трудно можешь посмотреть в чём проблела этой галереи...
Я сделал так как сказал Добрый модератор а результата никакого...


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

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