Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Подгрузка картинок. Отображается только после рефреш. (http://www.flasher.ru/forum/showthread.php?t=57363)

alexeyu 22.04.2004 19:34

Подгрузка картинок. Отображается только после рефреш.
 
Вложений: 1
Сражу скажу - я не профи, поэтому могут быть тупые ошибки.

Наваял я полоску для просмотра превьюшек (кликнул - в другом фрейме открылось)

Вобщем, сабж.
Разумеется, когда так смотриш - проблем нет.
А вот когда с сервера - только после обновления.
Кто подскажет что за несправедливость?

Ещё не пойму почему при старте центр не правильно находит...

alexeyu 24.04.2004 19:23

Господа, ну неужели вы так и позволите человеку погибнуть. Неужто никто не подскажет???

silin 24.04.2004 22:14

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

onEnterFrame = function() {
        var allget=true;
        for (i=0; i<photos_array.length; i++)
        {
                var l = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesLoaded();
                var t = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesTotal();
                trace(l+"  "+t);
                if (l && t && l>=t) {
                        _root.main_movie.buttons["foto_" + photos_array[i]]._x = nnn_pos;
                        _root.main_movie.buttons["link_" + photos_array[i]]._x = nnn_pos;
                        nnn_pos = nnn_pos + _root.main_movie.buttons["foto_" + photos_array[i]]._width + space_pos;
                }else allget=false;
                if(allget)
                {
                        _global.pos = 0 - (_root.main_movie.buttons._width / 2);
                        _root._visible = true;
                        _root.main_movie.play(3);
                        delete _root.onEnterFrame;
                }
        }
};


silin 24.04.2004 23:25

пардон, вот так ведь имелось ввиду
Код:

onEnterFrame = function() {
        var allget=true;
        for (i=0; i<photos_array.length; i++)
        {
                var l = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesLoaded();
                var t = _root.main_movie.buttons["foto_" + photos_array[i]].getBytesTotal();
                trace(l+"  "+t);
                if (l && t && l>=t) {
                        _root.main_movie.buttons["foto_" + photos_array[i]]._x = nnn_pos;
                        _root.main_movie.buttons["link_" + photos_array[i]]._x = nnn_pos;
                        nnn_pos = nnn_pos + _root.main_movie.buttons["foto_" + photos_array[i]]._width + space_pos;
                }else allget=false;
               
        }
        if(allget)
        {
                _global.pos = 0 - (_root.main_movie.buttons._width / 2);
                _root._visible = true;
                _root.main_movie.play(3);
                delete _root.onEnterFrame;
        }
};


TTS 25.04.2004 00:01

Код:

//предусмотрено под размер фоток 80x60
_global.photos_array = new Array();
loadVariables("photos_list.php", "_root", "GET");
_global.space_pos = 50;  // расстояние между фотками
_global.photo_center = 30;  // высота_фотки/2  - центровка
_global.photo_border_color = "0xA8BB52";  //цвет бордюра фоток

onData = function()
{
        if (files != null)
        {
        _global.photos_folder = folder;
        _global.photos_array = files.split(",");
        _root.main_movie.gotoAndPlay(2);
/**********onEnterFrame*************/
                _root.onEnterFrame=function(){
                        var allget=true;
                        for (i=0; i<photos_array.length; i++)
                                        if (_root.main_movie.buttons["foto_" + photos_array[i]]._width==0) allget=false;
                        if(allget)
                        {
                                var nnn_pos=0;
                                for(i=0; i<photos_array.length; i++){
                                        _root.main_movie.buttons["foto_" + photos_array[i]]._x = nnn_pos;
                                        _root.main_movie.buttons["link_" + photos_array[i]]._x = nnn_pos;
                                        _root.main_movie.buttons["foto_" +photos_array[i]]._y = 0 - photo_center; // это перетаскиваем и второго фрейма main_movie
                                        nnn_pos = nnn_pos + _root.main_movie.buttons["foto_" + photos_array[i]]._width + space_pos;
                                }
                                _global.pos = 0 - (_root.main_movie.buttons._width / 2);
                                _root._visible = true;
                                _root.main_movie.buttons.onEnterFrame = function() { // и это тоже переехало из main_movie
                                        if(_root.main_movie.buttons._alpha<100) {_root.main_movie.buttons._alpha += 1;}  //от последнего числа зависит скорость возрастания альфы при старте (мин 0.5)
                                        else _root.main_movie.gotoAndPlay(3);
                                }
                                delete _root.onEnterFrame;
                        }
                }
/**********onEnterFrame*************/
        }
}

Цитата:

Ещё не пойму почему при старте центр не правильно находит...
даже когда картинка загружена _width и _height не сразу выдают правильный размер картинки, поэтому проверку ззагрузки я заменил на _root.main_movie.buttons["foto_" + photos_array[i]]._width==0

Nox Noctis 25.04.2004 00:11

я не тестил код. предупреждаю :)

то что вижу сразу:

плохо 1:
onData для рута срабатывает как минимум один раз по-любому. у тебя она срабатывает два раза. угадай почему :)

плохо 2:
нельзя называть файл, в котором всего лишь хранятся переменные расширением .php: в твоем случае это еще недограбли, но вообще, ты не сможешь определить getBytesTotal у файла, если у него исполняемое расширение, даже если хранятся в нём всего лишь текстовые переменные

хехех... где-то я уже это (l && t && l>=t) видел :))

только с тех пор всё несколько извменилось.
стоит обновить концепцию.

в семёрке появилась одна замечательная особенность (даже если публиковать под шестёрку) - при загрузке файлов размер getBytesTotal ИНОГДА бывает равно -1 до того как началась загрузка. в шестёрке -1 возвращалось исключительно тогда, когда файл не найден.

так что конструкция l && t в семёрке будет работать как бог на душу положит (потому как отрицательные числа тоже преобразуются в true)

и еще одна особенность - начальный размер файла может быть не равен нулю. если вы не анлоадите клип перед тем как грузить в него что-то новое, или если вы создали контейнер для загрузки вручную (помним, что пустой клип созданный не-программно имеет размер 4 байта, а не ноль, как хочется думать.)

итого:
— либо строго анлоадить клип перед тем как вызывать лоад,

— либо создавать контейнер для загрузки программно, и проверять (l>0 && t>0 && l>=t)

— либо просто проверять (l>4 && t>4 && l>=t), где 4 - это размер пустого клипа созданного не-программно.

вот такие мелочи создают ОХРЕНИТЕЛЬНЫЕ баги. сам видел. :))

alexeyu 25.04.2004 05:36

Спасибо ОГРОМНОЕ всем кто откликнулся!
Всё отлично заработало!

А по поводу PHP - вобщето на самом деле у меня он генерирует эти переменные...


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

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