Loader:Загрузка изображений в массив.
Пробую написать нуб-программу, которая бы грузила картинки в массив, а затем выводила их.
Получился вот такой код: Код AS3:
Цитата:
|
На момент обращения к
Код AS3:
Плюс ко всему лучше подписывать сам лоадер на Event.COMPLETE: Код AS3:
|
KumoKairo, нда, действительно пишет undefined.
1. Исправил на EVENT.COMPLETE. 2. Меня интересует вариант "после того как все картинки загрузятся". Казалось бы, вот такой костыль должен решать: Код AS3:
Цитата:
|
Добавляйте в массив с помощью .push();
Код AS3:
|
Кхм, что-то не помогает.
Но, кстати, если код значительно упростить: Код AS3:
Цитата:
Может при выходе из цикла что-то происходит. |
imageCounter надо увеличивать при загрузке картинки, а не в цикле, где вы только говорите программе загрузить картинки)
У вас в конце цикла imageCounter сразу становится равным 2, и три загрузчика начинают трудиться над загрузкой изображений. И после загрузки каждого изображения в отдельности вызывается функция initListener() Поэтому первый вызов nitListener() произойдет "намного" позже окончания цикла |
Переработал с учетом замечаний:
Код AS3:
Теперь всё работает, спасибо ^_^ P.S. Кстати, в подсветке форумных кодов, трэйс-кавычечные элементы можно было бы сделать своим цветом, ну например светло-коричневым. А то сливается с кодом других команд, эргономичность ниже. |
)) А то что вы глаголы Пишете с большой буквы, эргономичность не Снижает?
В AS3 только названия классов пишутся с большой буквы. Привыкайте сразу, потом будет тяжело перестраиваться. |
Да не, яж не наезжаю, так чисто выразил соображение. Если по каким-то причинам этого нельзя - да пожалуйста.
А где я глаголы с большой буквы писал, что-то не припомню. Хотя наверное изредка бывает, да. Это наверное влияние викканских эманаций. Или может речь шла о переменных с большой букы? Это да, надо бороцца. И еще черточки всякие там проставлять перед ними наверное сразу нужно учиться. |
public class Image_array_load // правильно: ImageToArrayLoader ("camel style", горбатый как верблюд)
Не надо прочерков, разве что при именовании констант, которые полностью набираются капсом, то есть public static const START_FIGHTING:String = "startFighting"; public function ArrayDisplay():void // правильно: displayArray (глаголы, то есть функции, с маленькой) private var PicArray:Array; // правильно: _picArray (приватные переменные начинаются с подчеркивания и с маленькой) |
Wolsh, аа вот оно что, а я думал глаголы в камментах этого форума )))
Ок, учтём. |
Оппа. А эта программа (как оказалось) работает не правильно.
Она три раза подряд выдает третье изображение. Я даже подозреваю, что все три элемента массива содержат третье изображение. Опять какие-то мутно-уловимые асинхронные штуковины? Прошу помощи в нахождении бага. Или может быть, всё надо переделывать с нуля. Не знаю точно как, может быть сначала создать массив URLRequest значений, и цикл другого типа юзать. |
А чего Вы ждали, у Вас же один Лоадер сохраняется в приватной переменной, последний из создаваемых в цикле. Или Вы думали, что одна переменная будет хранить все три Лоадера в себе?))
Соответственно в обработчике Вы у этого последнего Лоадера и забираете то что он загрузил, независимо от того, какой Лоадер на самом деле послал событие COMPLETE: Код AS3:
Код AS3:
|
Wolsh, благодарю за багфикс, теперь все три картинки выводятся.
Цитата:
Рассмотрим по итерациям. 1. i = 0, Создаем экземпляр imageLoader, Грузим в него "text1.png", Запускаем слушатель. 2. Выходим из цикла for. В переменную BitData записываем картинку text1.png, Перекидываем ее в BitItem. 3. Засовываем его в PicArray[0], Наращиваем переменную индекса массива. 4. Возвращаемся в цикл for, получаем i = 1, повторяем. Я же успел значение text1.png засунуть в массив! И при следующей итерации, то же должно произойти с text2.png... Цитата:
Цитата:
Я предполагал, что либо этот выход происходит каждый раз, и я успеваю засунуть значение в массив. Либо же, как-то асинхронно запустяццо три слушателя, и каждый (уже сложнее представить такое, лол) как-то разрулит ситуацию сам, ведь он успел получить соответствующую ему строку. Цитата:
Однако почему она не равнозначна той записи (по указанным выше моментам), не очень понятно. |
Цитата:
Цитата:
Учите основы. Читайте главы про событийную модель. Если нужно, пейте кофе. Цитата:
|
Вот оно как, картина начинает проясняться.
Хотя некоторые сомнения всё-таки остаются. Например, если сборщик мусора сжирает первые две инициации initListener, тогда, вроде как и эта строка Код AS3:
Впрочем, не хочу отвлекать вас лишний раз, нужно перечитывать главу Мука про события. Тем более, что кофе пока вне доступа, да к тому же еще и понедельник : ) Хотелось бы, разве что, обратить внимание на вот этот фрагмент: Цитата:
Код AS3:
Код AS3:
И можно отметить интересный ньюанс: В изначальном варианте, порядок вывода картинок такой: Вторая, Третья, Первая. (похоже, это зависит от размеров файлов: 39Кб, 34Кб, 31Кб) В исправленном варианте, порядок вывода картинок такой: Третья, Первая, Вторая. (здесь принцип непонятен). |
А порядка и не будет, тем более с такой маленькой разницей в весе. Там слишком много факторов влияют, особенно в сети (да и при чтении с диска есть моменты))). Если важен порядок, надо использовать последовательную, а не параллельную загрузку (то есть грузить в один лоадер, каждую следующую загрузку начинать только после завершения предыдущей).
Локальная переменная — да, я имел в виду ее. Обратите внимание, ссылка опять вроде бы нигде не сохраняется. Возможно, у работающих Лоадеров просто иммунитет — честно, не задавался этим вопросом. |
У Мука в книге кстати был не Event.Complete, а Event.Init, там правда один файл грузился.
Может имунны лоадеры у которых комплит, а у которых инит нет, но это надо отдельно смотреть. Ок, понятно. Заносим "последовательная загрузка" в ToDo List. |
Цитата:
Код:
>Цикл отработал initListener == ссылке на последний лоадер. Загрузки начались. Цитата:
Порядок не зависит от размера файла, кто первый загрузился того и тапки. Конечно первый чаще загружается самый маленький, но при таком маленьком разбросе в размерах, как у вас, это может быть какой угодно файл. P.S. Про порядок вижу вам уже ответили пока я пост писал. P.P.S. Если по хорошему, то в вашем случае глобальная переменная класса нужна только одна - массив со ссылками на загруженные картинки. (у вас PicArray) |
Котейка, извиняюсь что туплю, но главу Мука я еще не перечитывал, поэтому...
Цитата:
Ведь currentTarget.content всегда равен ссылке на последний лоадер, и всё равно должна только третья картинка отображаться : ) Как же тогда currentTarget получает различные значения? Цитата:
Код AS3:
|
Цитата:
|
Цитата:
То есть три экземпляра сгенерились, переменная исчезла, а они висят в воздухе. Я всё забываю, что и такие эфемерные классы как лоадер всё-таки имеют осязаемые экземпляры, а не фантомную абстрактную муть. Цитата:
|
Цитата:
Вот так как-то: Код AS3:
Ну и еще, что не отслеживается возможность возникновения ошибки и что в вашей реализации, что в моей если хоть одна картинка из списка не загрузится то картинки никогда не будут добавлены на экран. |
Цитата:
|
Хочу обратиться к автору, а не проще ли использовать либу LoaderMax и готовый класс ImageLoader, и не возиться с этими бубнами.
|
Котейка, большое спасибо за готовый код! Правда при компилляции во Flash CS3 он выдает ошибку:
Цитата:
Код интересный, я почти всё понял. Смущает, разве что, строка где находится Цитата:
Wolsh, ценное замечание, вот как раз такие простые базовые вещи и остаются неосмысленными подчас. Я чисто автоматически предполагал, что всё в конечном счете является объектом и сводится к классу Object, например. Хотя конкретно о переменных не задумывался в этом контексте. Цитата:
Не могли бы вы рассказать чуть подробнее, где взять эту библиотеку и как ее интегрировать в проект (или может в сам флэш)? |
Цитата:
Добавлено через 24 минуты Когда решите сами сделать какой нибудь хороший и как это называется универсальный загрузчик, то вернитесь в эту тему и изучите вот этот загрузчик https://github.com/arthur-debert/BulkLoader . Мне эта ссылка очень пригодилась. |
Fogflasher дело в том, что Flash CS3 компилит под 9й плеер, а вектора появились только в 10м :) Его можно заменить на обычный массив, будет все так же. Вектора просто работают чуть по-шустрее за счет заранее известного типа их содержимого.
Цитата:
Что касательно LoaderMax. Это либа зеленых носков http://www.greensock.com/loadermax/ там у них еще много интересного есть. Но как правильно заметил Akopalipsis не нужно библиотек, если вы хотите учиться. |
Котейка а он бесплатный?)
|
Цитата:
Не побоюсь сказать, что TweenMax для флеша как стандарт де факто, либа которая должна быть у всех по умолчанию. Иначе о какой либо продуктивности и удобности речи не может быть. Цитата:
|
Akopalipsis, бесплатный для некоммерческого использования)
|
Цитата:
Но мне кажется, что вы о другом... И ещё раз уточню - разве он не платный? я читал на этом форуме, что он только в ознакомительных целях бесплатный. |
okouser, это уже другая история) Я только отвечал на прямой вопрос о бесплатности либы.
Платить за лицензию или нет в данном случае больше вопрос совести, чем возможность судебного преследования. Здесь слишком много факторов, которые делают второе буквально невозможным. |
Цитата:
Usage in 100% free apps, games, sites, and other software even if you charge a fee to develop these products Имеется ввиду использования только в 100% бесплатных приложениях, и в других приложениях где вам платят за вашу работу. И в самой лицензии говориться, если ваше приложение приносит прибыль позволяющий купить лицензию, то вы должны купить у нас. В любом случае наши бонусные плагины для участников клуба, при монетизации приложения делают ее работу намного быстрее и эффективнее. Это все окупается и т.д. От себя могу сказать, мне нравиться исходники от GreenSock. Все полностью документировано, комментировано и легко читается. Чего только там нет, они совместили все и вся для разработчика. |
namespaces Полностью с Вами согласен, да и примеры на загрузку цп там тоже убедительные. И я считаю, что и если правда на этом зарабатывать, то не стоит жалеть денег и честно купить.
|
Akopalipsis, да, я пока и ориентируюсь на освоение базовых вещей. Нужно хотя бы преобрести некоторый опыт персональнх разработок в различных сферах, и уже потом юзать крутые сторонние решения. Тем не менее спасибо за наводку на BulkLoader, беру на заметку.
(Оффтоп: а как вы ники белым цветом делаете, это функция форума, или вручную просто?) Котейка, заменил Vector на Array, теперь всё работает. Правда порядок вывода файлов прежний и странный: 3-ий, 1-ый, 2-ой : ) namespaces, благодарю за наводку на greensocks, хотя о классе TweenLite мне уже приходилось слышать в лекции от Тода Перкинса, он тоже советовал это решение. Я скачал эту либу, немножечко пробежался по файлам. Пара вопросов: 1. Насколько я понял, эта либа содержит вообще все решения от гринсок? Ну то есть там есть и полноценный ТвинМакс и все прочие. 2. Можно ли тупо скопировать файл LoaderMax.as в папку со своим проектом, и там создавать его инстанции. Или же, все эти классы завязаны в некую единую библиотечную целостность, и нужно непременно грузить в каждый проект всю библиотеку. |
Цитата:
Fogflasher это просто выбор цвета. И на первый вопрос - не знаю что вы качали, но вроде там сразу всё и max и lite. |
Цитата:
Правильно, можно по всякому. Компилятор по любому оптимизирует вложенные классы и оставляет то что необходимо для импорта в SWF. Так или иначе для новичка требуется установить все ссылки через звездочку, чтоб можно было выбрать подходящий класс для данного случая. Если даже считается плохим тоном импортировать всю либу со всеми его подклассами, это может повлиять лишь на скорость компиляции и не более. То есть пока компилятор будет производить поиск по ссылкам в кеше. Но в само приложение включаются только те классы на которые присутствуют ссылки. Аналогично тому как работает GC. |
Ну еще суффиксы есть для переменных ..._cуффикс
|
Часовой пояс GMT +4, время: 16:36. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.