Форум 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)
-   -   Сменные баннеры (http://www.flasher.ru/forum/showthread.php?t=85856)

Ulya 02.10.2006 11:51

Сменные баннеры
 
Уважаемые гуру, помогите ещё раз пожалйста.
Хотелось бы сделать баннер программно из массива картинок
Есть массив объектов, ести объект имеет поле "тип", равное "banner", то к объекту также прилепляется массив arr с именами картинок arr[u].b_name и временем зависания каждой картинки на экране arr[u].time. Не получается менять баннер через нужный промежуток, подскажите где ошибка. Мне или нужно сделать задержку в том цикле, который закоментарен, либо заставить работать функциию loop, она сейчас не работает.
Код:

function PutObjects() {
        _root.depth++;
        for (q=0; q<_root.Objects.length; q++) {
                var curr1:MovieClipLoader = new MovieClipLoader();
                var curr:MovieClip = _root.createEmptyMovieClip("obj_"+q, _root.depth);
                        if (_root.Objects[q].type eq "banner") {
                        _root.depth++;
                        var mclListener:Object = new Object();
                        mclListener.onLoadInit = function(target_mc:MovieClip) {
                                number = target_mc._name.split("_");
                                nu = Number(number[1]);
                                target_mc._alpha = _root.Objects[nu].alpha;
                                target_mc._x = _root.Objects[nu].x;
                                target_mc._y = _root.Objects[nu].y;
                                target_mc._width = _root.Objects[nu].w;
                                target_mc._height = _root.Objects[nu].h;
                        };
                        u = 0;
                        function loop() {
                                trace("u="+u);
                                if (u == _root.Objects[q].arr.length) {
                                        clearInterval(l);
                                        return;
                                }
                                u++;
                                curr1.loadClip(_root.Objects[q].arr[u].b_name, curr);
                                curr1.addListener(mclListener);
                        }
                       
                        l=setInterval(this,"loop", 1000);
                        /*for (u=0; u<_root.Objects[q].arr.length; u++) {
                        curr1.loadClip(_root.Objects[q].arr[u].b_name, curr);
                        }
                        curr1.addListener(mclListener);
                        */
                }
               
        }
}


Ulya 02.10.2006 15:00

Сделала с использование класса MC Tween , теперь у меня баннеры меняются, но так в цикле, это происходит один раз, то есть, если например в папке лежат 4 баннера, они меняются друг за другом, цикл останавоивается. Как начать выделенный цикл сначала?
Код:

if (_root.Objects[q].type eq "banner") {
                        _root.depth++;
                        curr._alpha = _root.Objects[q].alpha;
                        curr._x = _root.Objects[q].x;
                        curr._y = _root.Objects[q].y;
                        for (u=0; u<_root.Objects[q].arr.length; u++) {
                                var item:MovieClip = curr.createEmptyMovieClip("item_"+u, _root.depth);
                                item.loadMovie(_root.Objects[q].arr[u].b_name);
                                item._alpha = 0;
                                _root.depth++;
                                trace("item="+item);
                        }
                        _root.FLAG = false;
                        myCallBack = function () {
                                trace("ok, completed");
                                trace("u="+u);
                        };
                        for (u=0; u<_root.Objects[q].arr.length; u++) {
                                trace("delay "+_root.Objects[q].arr[u].time);
                               
                                if ((u == 0) && (!_root.FLAG)) {
                                        curr["item_"+u].tween("_alpha", 100, 0.1, "linear", undefined, myCallBack);
                                        _root.FLAG = true;
                                }
                                if ((u == 0) && (FLAG)) {
                                        curr["item_"+u].tween("_alpha", 100, 0.1, "linear", _root.Objects[q].arr[_root.Objects[q].arr.length-1].time, myCallBack);
                                        _root.FLAG = true;
                                }
                                trace("u="+u);
                                //trace("_root.s "+_root.s);
                                curr["item_"+u].tween("_alpha", 100, 0.1, "linear", _root.Objects[q].arr[u-1].time, myCallBack);
                                _root.FLAG = true;
                        }

                }


Хемуль 02.10.2006 15:55

Вложений: 1
2 Ulya:
Я бы не делал цикла вообще... Цикл предполагает выполнение каких-то действий до возникновения какого-то условия... Если у вас цикл бесконечный, то зачем он вообще нужен?
Я бы просто сделал всё setInterval'ами... А вообще взгляните на прикрепление... Чем-то схоже с вашей задачей...
Заметьте, я сделал это вообще без Твинов и циклов...

Ulya 05.10.2006 12:30

Хемуль, спасибо за пример, сделала вот так, работает, но со временем зависает, у меня есть подозрение, что скорей всего что-то где-то не удаляется, за полчаса флэха зависает полностью, подскадите где что нужно убивать?
Код:

function put(banners_arr, qq) {
        curr = _root["obj_"+qq];
        var curr1:MovieClipLoader = new MovieClipLoader();
        trace(banners_arr);
        var DISSOLVE_INTERVAL:Number = 10;
        var PICTURES_NUMBER:Number = banners_arr.length;
        var frameCounter:Number = 0;
        var currentPicture:Number = 0;
        var mclListener:Object = new Object();
        mclListener.onLoadInit = function(target_mc:MovieClip) {
                trace("onLoadInit "+target_mc);
                target_mc._x = _root.Objects[qq].x;
                target_mc._y = _root.Objects[qq].y;
                target_mc._width = _root.Objects[qq].w;
                target_mc._height = _root.Objects[qq].h;
        };
        addPicture(currentPicture).frameCounter = DISSOLVE_INTERVAL;
        function addPicture(pictureNum):MovieClip {
                var newPicture = curr.createEmptyMovieClip("newPicture", this.getNextHighestDepth());
                newPicture.frameCounter = 1;
                newPicture.onEnterFrame = function() {
                        trace("on EnterFrame new Picture"+ this.frameCounter);
                        this.frameCounter++;
                };
                SHOW_INTERVAL = 31*banners_arr[pictureNum].time;
                var newPictureName:String = banners_arr[pictureNum].b_name;
                for (v in curr) {
                        curr1.unloadClip(curr[v]);
                }
                curr1.loadClip(newPictureName, newPicture);
                curr1.addListener(mclListener);
                newPicture.frameCounter = 1;
                return newPicture;
        }
        curr.onEnterFrame = function() {
                if (PICTURES_NUMBER<>1) {
                        if (frameCounter<=DISSOLVE_INTERVAL) {
                                trace("this "+this.newPicture);
                                this.newPicture._alpha = frameCounter*(100/DISSOLVE_INTERVAL);
                        }   
                        if (frameCounter>SHOW_INTERVAL) {
                                for (v in this) {
                                        this[v].removeMovieClip();
                                }
                                trace("теперь внутри");
                                for (v in this) {
                                        trace("-"+this[v]);
                                }
                                currentPicture++;
                                if (currentPicture>PICTURES_NUMBER-1) {
                                        currentPicture = 0;
                                }
                                trace("PICTURES_NUMBER "+PICTURES_NUMBER);
                                addPicture(currentPicture);
                                frameCounter = 1;
                        } else {
                                frameCounter++;
                        }
                }
        };
}



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

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