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

Da_Demon 12.09.2008 19:08

Загрузка и прорисовка изображений.
 
Всем прив. Помогите пожалуйста, думаю многим будет интересно. Вобщем ниже кусок моего кода..
С его помощью грузятся картинки в мувик.
Проблема - загрузка происходит долго, даже если флешка запускаеться второй раз и картинки из кеша цикл бежит оч медленно... По 10 в секунду, примерно несмотря на то что большинство одинаковых.
И иногда уже по окончанию загрузки,когда прелоадер прячется рисунки появляются поочереди наглазах.


Код:

myListener.onLoadInit = function(target_mc:MovieClip) {
        if (nowload < kolload) {
                nowload += 1;
                k = masW[nowload];
                l = masK[nowload];
                my_mcl.loadClip(masT[nowload], _root[l][k]);
        } else {
                _root.toplay1 = 1;
                _root.toplay = 1;
        }
};
my_mcl.addListener(myListener);

function printloc(src:String, posx:String, posy:String, ido:Number, posz:String) {
        _root[posz][oname].removeMovieClip();
        _root[posz].createEmptyMovieClip(oname, ido+500);
        _root[posz][oname]._x = int(posx);
        _root[posz][oname]._y = int(posy);
        if (kolload == 0) {
                my_mcl.loadClip(src, _root[posz][oname]);
                kolload = 1;
                masT[kolload] = src;
                masW[kolload] = oname;
                masK[kolload] = posz;
        } else {
                kolload += 1;
                masT[kolload] = src;
                masW[kolload] = oname;
                masK[kolload] = posz;
        }
}

printloc( - в цыкле из ХМЛ.

Da_Demon 15.09.2008 13:02

Скорость цикла увеличил смешным образом - фпс в 50 поставил. Хотя каким образом эт на код повлиять могло не догадываюсь.

Но тем не мение чем быстрее происходит загрузка рисунков тем больше вероятность того что они прорисовываться на екране будут рывками.

Wolsh 15.09.2008 14:36

Если честно, Da_Demon, я голову сломал пытаясь понять этот код. Несмотря на потрясающую ритмичность, он совершенно нечитабелен)))) Может потому что я понятия не имею кто такой masW и с чем едят oname? Посему не знаю в чем тут проблема, но так, замечание общего характера.
Зачем Вы повторяете блок
Код:

masT[kolload] = src;
masW[kolload] = oname;
masK[kolload] = posz;

в блоках условия, если он не зависит от условия? Вынесите его за if else.
Реально совершенно невозможно догадаться о значениях всех этих десятков переменных, которые Вы используете. Как результат - Вы, скорее всего, не получите ответа, хотя сама тема одна из любимейших на этом форуме)))

Da_Demon 15.09.2008 16:38

В том то и дело что не в переменных и даже не в коде суть, На всякий случай его разместил. Со скоростью разобрался.
Проблема свелась к простому.
Грузим толпу картинок в один мувик и потом те-же в другой.
В первом случае понятно появляются по мере загрузки, но во втором тоже не одновременно, уходит время на саму прорисовку изображений - как его посчитать и дождаться окончания.?

В выложенном коде убрал просто лишние фрагменты. Конечно, вполне может быть что и есть нерациональности местами, но сути это не меняет.

Wolsh 15.09.2008 18:56

1) А, простите, что за странная необходимость грузить картинки второй раз? Я бы еще понял - клипы, но изображения-то зачем? Это уже совсем не мелкая проблема с оптимизацией...
2) Что значит как посчитать и дождаться окончания? Окончание - событие onLoadInit. Вы же его используете в своем (?) коде!

gloomyBrain 16.09.2008 02:57

Цитата:

2) Что значит как посчитать и дождаться окончания? Окончание - событие onLoadInit. Вы же его используете в своем (?) коде!
нет, Wolsh, не совсем так
Дело в том, что флешу и правда нужно время на отрисовку
Особенно заметно при изменении размеров УЖЕ загруженной картинки
Выход есть - на мой взгляд это BitmapData
Т.е. я Вам, Da Demon, предлагаю вместо повторной загрузки картинки сделать вот что:
-загрузить один раз картинку
-сохранить её как BitmapData (надеюсь, хелп у Вас есть)
-отрисовывать её (битмап дату) каждый раз когда надо отобразить картинку
-использовать updateAfterEvent() (независимо от частоты кадров перерендер экрана)

Wolsh 16.09.2008 10:35

А, вон о чем речь. Ну этого уж точно не посчитать - у когото пень 133-й, у когото кор2квад (наверно поэтому я сразу и не понял, что за задержка)).
По поводу битмапдата - не буду утверждать, что избавит от описанных задержек, тут наверно от организации все зависит, но, собственно, именно битмапДату имел в виду, когда возмущался )) двойной закачкой. Мне можно, я сам когда-то такую фигню сделал с двойной загрузкой, с ней и пришел в первый раз на форум - три года назад))) С тех пор здесь масса решений с битмапДатой появилась, я сам пару галлерей выкладывал. Поиск.

Da_Demon 16.09.2008 14:44

1) А, простите, что за странная необходимость грузить картинки второй раз? Я бы еще понял - клипы, но изображения-то зачем? Это уже совсем не мелкая проблема с оптимизацией...
2) Что значит как посчитать и дождаться окончания? Окончание - событие onLoadInit. Вы же его используете в своем (?) коде!

Нет) второй загрузки нет никакой. Просто написал способ проблему показать. Я о втором посещении например... Тоесть если картинки грузяться с сервера - на это уходит время и они успевают прорисоватся.
Если страничка посещаеться второй рас и картинки есть в кеше, то на загрузку время не уходит вообще, onLoadInit срабатывает и все пересчитывает мол загрузил,
прелоадер как следствие прячется, а на экране во всю идет строительство.

Цитата:

Ну этого уж точно не посчитать - у когото пень 133-й.
Wolsh Попробуй подгрузить во флеш ролик 300 штук пнг картинок с альфаканалом. пусть даже одинаковых.

2gloomyBrain с битмапдатой, несовсем удобно картинки оч разные, в том числе и анимации и флешки маленькие...

Можно конечно решить проблему простой задержкой секунды в 2-3 после загрузки, но эт выход който некрасивый имхо. Ктому-же вдруг у кого-то действительно IBM-I..IV;)

Wolsh 16.09.2008 15:53

Цитата:

Wolsh Попробуй подгрузить во флеш ролик 300 штук пнг картинок с альфаканалом. пусть даже одинаковых.
Ну я и говорю проблемы с организацией))))) Я бы и хтмл страницу нафиг послал, начни она грузить 300 картинок.

Da_Demon 17.09.2008 00:58

Цитата:

Ну я и говорю проблемы с организацией))))) Я бы и хтмл страницу нафиг послал, начни она грузить 300 картинок.
Да почти любая, где фон фон из одной картинки размером в 2пх.
Так вот во флеше так не выходит если картинка эта тоже в swf и клип в котором она множиться нужно двигать.


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

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