Форум 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=86011)

Хемуль 08.10.2006 03:45

2 n01known:
Код:

var loadListener:Object = new Object();

loadListener.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number) {
    if (errorCode == "URLNotFound")
    {
        trace("Файл не найден!");
    }
}

var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);

var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mcLoader.loadClip("http://mysite.com/images/img.jpg", mc);


wvxvw 08.10.2006 05:38

2 Хемуль:
За какой границой?.. в смысле, границой какой страны? =)
А я вот сдавал и небольшие проекты с использованием ХМЛя (второй линк в подписи, например) не скажу, что ХМЛ там очень прозрачный и доходчивый, но, опять же ничего супер-пупер... убил месяц на объяснения типа "а как оно работает, куда положить, как пути прописать, как редактировать" и т.п. Неутешительный итог - флешка показывает устаревшую информацию по причине - человек которому я объяснял уволился, на его место взяли еще одного, не менее дубового, а у меня начинать все по второму кругу сил уже нет, да и деньги мне уже за проект отдали...
Да, а потом для этих же ребят делал флеш-банеры, ну, казалось бы, чего уж проще из флешВарз передавался адрес + код реферала, код ессно сменный, поэтому пришлось написать руководство по использованию банера. Опять же, каждый третий реферал потом писал "гневные письма в редакцию" типа "паааааачиму банер не работает???"

Хемуль 08.10.2006 06:11

2 wvxvw:
Да всё та же заграница... США...
А вообще действительно сложно в XML разбираться неискушённому человеку. Ни про какие CDATA ведь не знают наверняка, даже если с тэгами знакомы и XML'я не пугаются. Ломают парсеру глаза... ^_^

wvxvw 08.10.2006 06:39

Штаты - очень большая страна... и с очень разными людьми... но не смотря на это, практика показывает, что если заказчик, будь он хоть марсианин, может что-то сделать не так с твоей работой, то сделает он как минимум в 2 раза хуже ожидаемого %)
В случае с ХМЛ, 50% пользователей не знают, что его можно редактировать в ноутпаде, у еще 10% есть "продвинутый" ХМЛ-редактор, который напрочь искажает структуру, дописывает свои дурацкие теги, меняет кодировку... ну и еще по мелочам =) Оставшиеся 40% умеют редактировать ХМЛ, но у половины из них дел и так по горло, им некогда, у оставшихся есть дома жена с беременным ребенком и им срочно нужно уходить, или сервер может работать только с одной кодировкой, и ессно не с юникодами, кто-то начнет рассказывать про возможность ДОС-атаки на его любимый сервер с использованием предоставленной флешки и ХМЛя... вобщем, мрак =)
Ладно, все, это уже лирика, прекращаю =)

miramax 08.10.2006 12:30

Цитата:

Сообщение от wvxvw
у оставшихся есть дома жена с беременным ребенком и им срочно нужно уходить, или сервер может работать только с одной кодировкой, и ессно не с юникодами, кто-то начнет рассказывать про возможность ДОС-атаки на его любимый сервер с использованием предоставленной флешки и ХМЛя... вобщем, мрак =)

Вот-вот, все эти пункты, особенно первый меня убивает - практически через день такое слышу...
Вообще-то рашн юзера гораздо проще чему-то научить, например редактировать хмл. Наверное потому что нашим юзерам нечего делать и много свободного времени.:confused:

edo 10.10.2006 11:44

блин, читал читал и не понял ни чего))
если и будут изменения в этом сайте, то в 90% они опять лягут на меня.

можно посмотреть исходничек с примером загрузки клипов со строгой нумерацией? мне уже просто для себя интересно в этом разобраться.
а заказчик пусть сосет)) пока делаю тупо подгрузку клипов, где все картинки в кучу

Хемуль 11.10.2006 04:07

Вложений: 1
2 edo:
Вот, написал вам пример. Чувствую, за прототипы в коде ругать будут... ^_^ Но это ничего, они по сути просто для демонстрации используются и к загрузке не относятся.
Значит, допустим, у нас есть папка resource в той же папке, в которой лежит флешка. В папке resource лежат 9 файлов: r1.jpg - r9.jpg... Мы ЗНАЕМ, что их 9. О том, как загружать флешки до того, как будет разорвана цепь нумерации, я писал выше. Тут же мы знаем, что их 9 и, если одна не загружается, переходим к загрузке следующей, пока не пройдём все 9. На месте каждой картинки во время загрузки пишутся проценты прогресса. После загрузки мувиклипу назначаются стандартные события.
Структура сцены такая:
- Мувиклип container (общий контейнер для всего)
-- Текстовые поля прогресса загрузки (создаются в процессе загрузки)
-- Мувиклип frame (рамки)
-- Мувиклип movies (контейнер для загружаемых мувиклипов)
--- Мувиклипы movie1 - movie9 (загружаемые мувиклипы)
Вот код:
Код:

var movieBaseName:String = "resources/r";
var movieExtension:String = "jpg";
var currentMovie:Number = 1;
var moviesNumber:Number = 9;
var moviesInRow:Number = 3;
var containerClipName:String = "container";
var frameClipName:String = "frame";
var moviesContainerClipName:String = "movies";
var movieContainerClipBaseName:String = "movie";
var progressTextName:String = "progress";
var left:Number = 100;
var top:Number = 100;
var movieWidth:Number = 60;
var movieHeight:Number = 60;
var rowsInterval:Number = 10;
var columnsInterval:Number = 10;
var progressTextWidth:Number = 40;
var progressTextHeight:Number = 20;
var progressTextFont:String = "_sans";
var progressTextSize:Number = 14;

var containerClip:MovieClip = this.createEmptyMovieClip(containerClipName, this.getNextHighestDepth());
containerClip._x = left;
containerClip._y = top;
var moviesContainerClip:MovieClip = containerClip.createEmptyMovieClip(moviesContainerClipName, containerClip.getNextHighestDepth());
containerClip.attachMovie("frame", frameClipName, containerClip.getNextHighestDepth());

var clipsLoader:MovieClipLoader = new MovieClipLoader();
var clipsLoaderListener:Object = new Object();

clipsLoaderListener.onLoadStart = function(targetClip:MovieClip)
{
        targetClip._parent.createTextField(progressTextName, targetClip._parent.getNextHighestDepth(), targetClip._x + (movieWidth - progressTextWidth) / 2, targetClip._y + (movieHeight - progressTextHeight) / 2, progressTextWidth, progressTextHeight);
        var progressTextFormat:TextFormat = new TextFormat();
        progressTextFormat.font = progressTextFont;
        progressTextFormat.size = progressTextSize;
        targetClip._parent[progressTextName].setNewTextFormat(progressTextFormat);
}

clipsLoaderListener.onLoadComplete = function(targetClip:MovieClip)
{
        targetClip._parent[progressTextName].removeTextField();
        loadNextMovie();
}

clipsLoaderListener.onLoadInit = function(targetClip:MovieClip)
{
        targetClip.onRollOver = function()
        {
                this.setTransformRGBA(100, 110, 100, 0, -100, 0, 100, 0);
        };
        targetClip.onRollOut = targetClip.onReleaseOutside = function()
        {
                this.resetTransformRGBA();
        };
        targetClip.onRelease = function()
        {
                trace("MovieClip: " + targetClip);
        };
}

clipsLoaderListener.onLoadError = function(targetClip:MovieClip, errorCode:String)
{
        targetClip.removeMovieClip();
        loadNextMovie();
}

clipsLoaderListener.onLoadProgress = function(targetClip:MovieClip, loadedBytes:Number, totalBytes:Number)
{
        var percent:Number = Math.ceil((loadedBytes / totalBytes) * 100);
        var progressTextField:TextField = targetClip._parent[progressTextName];
        progressTextField._x = targetClip._x + (movieWidth - progressTextField.textWidth) / 2;
        progressTextField._y = targetClip._y + (movieHeight - progressTextField.textHeight) / 2
        progressTextField.text = percent + "%";
}

function loadNewMovie(movieNumber:Number)
{
        var movieName:String = movieBaseName + movieNumber + "." + movieExtension;
        var movieContainerClipName:String = movieContainerClipBaseName + movieNumber;
        var movieContainerClip:MovieClip = moviesContainerClip.createEmptyMovieClip(movieContainerClipName ,moviesContainerClip.getNextHighestDepth());
        movieContainerClip._x = ((movieNumber - 1) % moviesInRow) * (movieWidth + columnsInterval) + columnsInterval;
        movieContainerClip._y =        Math.floor((movieNumber - 1) / moviesInRow) * (movieHeight + rowsInterval) + rowsInterval;
        clipsLoader.loadClip(movieName, movieContainerClip);
}

function loadNextMovie()
{
        currentMovie++;
        if (currentMovie <= moviesNumber)
        {
                loadNewMovie(currentMovie);
        }
}

MovieClip.prototype.setTransformRGBA = function (ra, rb, ga, gb, ba, bb, aa, ab)
{
        if (arguments.length < 8)
        {
                return false;
        }
        var x:Number = 0;
        while (x < arguments.length)
        {
                if (isNaN(arguments[x++]))
                {
                        return false;
                }
        }
        if (ra <= 100 && ga <= 100 && ba <= 100 && aa <= 100 && ra >= -100 && ga >= -100 && ba >= -100 && aa >= -100 && rb <= 255 && gb <= 255 && bb <= 255 && ab <= 255 && rb >= -255 && gb >= -255 && bb >= -255 && ab >= -255)
        {
                var thisColor:Object = {ra:ra, rb:rb, ga:ga, gb:gb, ba:ba, bb:bb, aa:aa, ab:ab};
                var col:Color = new Color(this);
                col.setTransform(thisColor);
                return true;
        }
        else
        {
                return false;
        }
}

MovieClip.prototype.resetTransformRGBA = function()
{
        var thisColor:Object = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa:100, ab:255};
        var col:Color = new Color(this);
        col.setTransform(thisColor);
}

clipsLoader.addListener(clipsLoaderListener);
loadNewMovie(currentMovie);

Исходник прикрепляю.

edo 12.10.2006 12:31

огромное спасибо! =)))
жаль без подробных коментариев, и реализуеться не совсем та задача.
но так куда более понятно, думаю разберусь как её потом под себя приспособить)
если что, спрошу еще)))

Хемуль 12.10.2006 12:41

2 edo:
Скажите, какой участок кода прокомментировать или дайте более конкретное описание задачи - постараюсь адаптировать для вас.

edo 12.10.2006 13:19

2 Хемуль
правда?
ой спасибо))
задача была, их не как галерею подгрузить, а просто при нажатии на кнопку заменять друг друга в одном контейнере, и что бы циклически, т.е. когда загрузиться последний, загружался первый.

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


очень приятно, что есть люди, которым не плевать и у которых находиться время, что бы помочь другим, даже таким деревянным в програмировании как я)


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

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