Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 1,2 > Баннер


Автор: StachelDraht 17.12.2007, 14:56
Привет!
У меня тут хитрая задача. Надо сделать баннер с использование xml
Баннер, размер не важен, подгружает в себя картинки извне и циклично их крутит.
Так вот у меня вопрос. Как можно осуществить такое цикличное прокручивание картинок.
Какие классы надо заюзать?

(Картинок может быть от 5 до 50)

Большое спасибо!

Автор: Maksys 17.12.2007, 21:16
класс XML  и его подобные.. и просто логику

Автор: StachelDraht 17.12.2007, 23:03
а createEmptyMovieClip тоже надо использовать?
Картиночки тоже надо анимировать.
Подумаю еще.
Спасибо!

Автор: Ninja 17.12.2007, 23:34
думаю, еще тут нужен MovieClipLoader

Автор: StachelDraht 18.12.2007, 09:21
а подгружать это все в динамическое текстовое поле?

Автор: StachelDraht 18.12.2007, 16:02
Здорово!
Картинки выводит, только все в одно место.
Что ж там надо дописать что бы у каждой картинки были разные координаты?

Автор: Maksys 19.12.2007, 05:31
задай координаты _х  и _у мувиклипу

Автор: StachelDraht 19.12.2007, 09:14
Maksys, 
задавал!
Выводит все картинки опять в одно место только уже по новым координатам.
А как сделать так что бы они рядом стояли?

Автор: StachelDraht 19.12.2007, 11:50
на данный момент у меня сейчас вот такая фигня:
Код

function countXML (loaded){
    if (loaded) {

var ch_nodes:Array=xml_doc.childNodes[0].childNodes;
for (var i=0; i<ch_nodes.length; i++) {
trace(ch_nodes[i].childNodes[0].firstChild.nodeValue);
trace(ch_nodes[i].childNodes[1].firstChild.nodeValue);
//trace (i);
createEmptyMovieClip ("mc", 0);
loadMovie (ch_nodes[i].childNodes[0].firstChild.nodeValue, mc);

}
    } else {
        trace ("Can't load file");
    }
}
xml_doc = new XML();
xml_doc.ignoreWhite = true;
xml_doc.onLoad = countXML;
xml_doc.load("data.xml");

Автор: Maksys 19.12.2007, 22:07
после loadMovie нужно придавать параметры масштабирования и позиционирования:
Код


function countXML(loaded) {
    if (loaded) {
        var ch_nodes:Array = xml_doc.childNodes[0].childNodes;
        for (var i = 0; i<ch_nodes.length; i++) {
            trace(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            trace(ch_nodes[i].childNodes[1].firstChild.nodeValue);
            //trace (i);
            createEmptyMovieClip("mc",0);
            loadMovie(ch_nodes[i].childNodes[0].firstChild.nodeValue, mc);
            mc._x = 0;//эти цифры должны меняться в зависимости от цыкла
            mc._y = 0;//
            mc._xscale = 10;//А эти нет, если картики одного размера
            mc._yscale = 10;//
        }
    } else {
        trace("Can't load file");
    }
}

Автор: StachelDraht 19.12.2007, 23:08
не погоди Maksys, че то я туплю.
1. что значит цифры должны меняться в зависимости от цикла?
2. а не будет ли целесообразней создавать динамически мувик для каждой картинки, тем более что потом каждому мувику надо будет дать ссылку (при нажатии на картинку переходим по ссылке)?
3. верно ли будет такое выражение для создания динамических мувиков, и как им обозначить координаты?
Код

var ch_nodes:Array=xml_doc.childNodes[0].childNodes;
for (var i=0; i<ch_nodes.length; i++) {
createEmptyMovieClip ("mc"+i, i);
loadMovie (ch_nodes[i].childNodes[0].firstChild.nodeValue, "mc"+i);

Насколько я понял два мувика не могут находится на одной глубине.

Автор: StachelDraht 20.12.2007, 17:02
Ну теперь то почему???
Вроде на разной глубине, координаты разные. Что еще надо?
Код

function countXML (loaded){
    if (loaded) {

var ch_nodes:Array=xml_doc.childNodes[0].childNodes;
for (var i=0; i<ch_nodes.length; i++) {
trace(ch_nodes[i].childNodes[0].firstChild.nodeValue);
trace(ch_nodes[i].childNodes[1].firstChild.nodeValue);
//trace (i);
_root.createEmptyMovieClip("mc"+i, i);
loadMovie (ch_nodes[i].childNodes[0].firstChild.nodeValue,  _root["mc"+i]);
            ['mc'+i]_x = 0;
            ['mc'+i]_y = i*60;
trace (_root["mc"+i].getDepth());
trace (_x); 
trace (_y);
trace ("");
}
    } else {
        trace ("Can't load file");
    }
}
xml_doc = new XML();
xml_doc.ignoreWhite = true;
xml_doc.onLoad = countXML;
xml_doc.load("data.xml");

Автор: Maksys 20.12.2007, 21:00
слушай дай исходные файлы.. а то я чета туплю по вечерам создавать с нуля лоадеры... я разберуся и выложу код.. полюбехе какая то мелкая трабла...

Автор: StachelDraht 21.12.2007, 10:39
http://slil.ru/25266037 - архив, сохранил под 8 версию.

Посмотри пожалуйста, что ж за беда такая.
Но кажеться мне, [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] там написано.

А должно быть так, что бы выводились все картинки (картинки все одинакового размера) друг по другом. Каждая картинка в своем мувике.

Спасибо!

Автор: Maksys 21.12.2007, 23:31
Трудно было но вроди получилось....
Я последний раз кодил в АС2 когда в прошлом году... но тем не менее навыки остались smile
Код

function countXML(loaded) {
    if (loaded) {
        var ch_nodes:Array = xml_doc.childNodes[0].childNodes;
        for (var i = 0; i<ch_nodes.length; i++) {
            trace(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            //trace(ch_nodes[i].childNodes[1].firstChild.nodeValue);
            //trace (i);
            //Создание пустого мувика в который кидаем написанное выше
            _root.createEmptyMovieClip("mc"+i,_root.getNextHighestDepth());
            _root['mc'+i].loadMovie(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            _root['mc'+i]._y = i*60;
            trace(_root['mc'+i].getDepth());
            trace(_root['mc'+i]._y);
            trace("");


        }
    } else {
        trace("Can't load file");
    }
}
xml_doc = new XML();
xml_doc.ignoreWhite = true;
xml_doc.onLoad = countXML;
xml_doc.load("data.xml");

Автор: StachelDraht 22.12.2007, 11:55
Maksys, ты гений!
Спасибо тебе большое!!! smile 

Но тема на этом не закрыта...

Автор: StachelDraht 2.1.2008, 09:54
С Наступившим Новым 2008 Годом!

А я не на шаг не продвинулся.
Застрял тут:
Код

            _root.createEmptyMovieClip("mc"+i,_root.getNextHighestDepth());
            _root['mc'+i].loadMovie(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            _root['mc'+i]._y = i*62;
            _root['mc'+i].onRelease = function () {
                getURL ("http://www.site.com", _blank);
            };

Почему при нажатии ничего не происходит?

Автор: Maksys 2.1.2008, 10:42
потому что так незя делать.... Надо искать выход на Flasher.ru я там гдето постил.. что то было придуманно... поищи на флешере если не найдешь попожа помогу поищу в старых проектах
...

Автор: StachelDraht 2.1.2008, 11:09
Хорошо, покапаюсь там еще раз.
Спасибо!

Автор: Maksys 2.1.2008, 11:25
http://www.flasher.ru/forum/showthread.php?t=103131&highlight=onRelease

Автор: StachelDraht 3.1.2008, 09:51
Maksys, 
я все равно ничего не понял.

Получается
Код

_root['mc'+i].numv = i;
_root['mc'+i].onRelease = function ()
{
trace (this.numv);
};

что он мне должен выводить?

Автор: Maksys 3.1.2008, 10:31
имя клипа и выводит...
Веришь нет.. но у меня твой код работает...  гони опять исходник... smile 

Автор: StachelDraht 3.1.2008, 10:48
не верю

http://slil.ru/25312000

Автор: Maksys 3.1.2008, 12:17
У тебя loadMovie мочит клип к которому ты прикручиваешь события... 
Код

function countXML(loaded) {
    if (loaded) {
        var ch_nodes:Array = xml_doc.childNodes[0].childNodes;
        for (var i = 0; i<ch_nodes.length; i++) {
            trace(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            //trace(ch_nodes[i].childNodes[1].firstChild.nodeValue);
            //trace (i);
            _root.createEmptyMovieClip("mc"+i,_root.getNextHighestDepth());
            _root['mc'+i].createEmptyMovieClip("container",_root.getNextHighestDepth());//создаем контейнер.. для загрузки.. который будет 
//убит loadMovie ром.
            _root['mc'+i].container.loadMovie(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            _root['mc'+i]._y = i*62;
            _root['mc'+i].onRelease = function() {
                trace("ты нажал на: "+this+" клип!");
            };
            trace("Depth"+" "+_root['mc'+i].getDepth());
            trace("Y="+_root['mc'+i]._y);
            trace("");
        }
    } else {
        trace("Can't load file");
    }
}
xml_doc = new XML();
xml_doc.ignoreWhite = true;
xml_doc.onLoad = countXML;
xml_doc.load("data.xml");


Из за этого придумали класс MovieClipLoader в конструкторе которого описано что нужно создавать контейнер.

Автор: StachelDraht 4.1.2008, 11:59
Maksys, спасибо, работает!
А скажи еще пожалуйста, можно ли вытащить ссылку вот таким раком:
Код

getURL (ch_nodes[i].childNodes[0].firstChild.nodeValue, "_blank");

У меня не получается.
Или у меня неправельно построен xml файл?

Спасибо тебе огромное, так выручаешь!

Автор: Maksys 4.1.2008, 12:12
Нет здесь косяк из за стекообразности обработчика событий.. чтобы решить эту траблу нужно все переменки загонять в объекты на которые уже реагируют события.
Код

function countXML(loaded) {
    if (loaded) {
        var ch_nodes:Array = xml_doc.childNodes[0].childNodes;
        for (var i = 0; i<ch_nodes.length; i++) {
            trace(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            //trace(ch_nodes[i].childNodes[1].firstChild.nodeValue);
            //trace (i);
            _root.createEmptyMovieClip("mc"+i,_root.getNextHighestDepth());
            _root['mc'+i].createEmptyMovieClip("container",_root.getNextHighestDepth());
            _root['mc'+i].container.loadMovie(ch_nodes[i].childNodes[0].firstChild.nodeValue);
            _root['mc'+i]._y = i*62;
            _root['mc'+i].link=ch_nodes[i].childNodes[1].firstChild.nodeValue;//ВНИМАТЕЛЬНО ЗЫРЬ СЮДЫ
            _root['mc'+i].onRelease = function() {
                getURL(this.link,"_blank");
            };
            trace("Depth"+" "+_root['mc'+i].getDepth());
            trace("Y="+_root['mc'+i]._y);
            trace("");
        }
    } else {
        trace("Can't load file");
    }
}
xml_doc = new XML();
xml_doc.ignoreWhite = true;
xml_doc.onLoad = countXML;
xml_doc.load("data.xml");

Автор: StachelDraht 4.1.2008, 12:19
Была такая идея, не смог ее осуществить. Спасибо большое!
Теперь осталось это анимировать. smile 

Спасибо!

Автор: StachelDraht 7.1.2008, 11:51
Довожу тут до цонца эту фигню.
Вопрос еще такой, как сделать что бы при наведении курсора на баннер анимация останавливалась

Код

            _root['mc'+i].onEnterFrame = function ()
            {
                if (onRollOver) {
                    _root[this]._y =0;
                };
                _root[this]._y -=0.2;
            };

Видать не правельно раз не работает.

Автор: Maksys 8.1.2008, 22:32
Цитата(StachelDraht @ 7.1.2008,  14:51)
Довожу тут до цонца эту фигню.
Вопрос еще такой, как сделать что бы при наведении курсора на баннер анимация останавливалась

Код

            _root['mc'+i].onEnterFrame = function ()
            {
                if (onRollOver) {
                    _root[this]._y =0;
                };
                _root[this]._y -=0.2;
            };

Видать не правельно раз не работает.

Эт че за фигня?!
Код

_root['mc'+i].onRollOver = function ()
            {
                this.stop();
            };

как минимум так...

Добавлено через 5 минут и 29 секунд
и ваще странная анимация...

Добавлено через 5 минут и 48 секунд
типа картинка то уезжает да?

Автор: StachelDraht 9.1.2008, 10:41
Ну типа уезжает.
Хотя по идее должно циклично прокручиваться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)