Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.08.2013, 13:38
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 21  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Ведь currentTarget.content всегда равен ссылке на последний лоадер
Это ссылка на экземпляр Лоадера, пославший данное конкретное Событие, а никак не на локальную переменную, хранящую ссылку на лоадер (которой к тому времени и в этом месте вообще не может быть, на то она и локальная, что существует/видна только локально в той функции, в которой была объявлена, и существует только ту сотую миллисекунды, пока отрабатывает функция).
__________________
Reality.getBounds(this);

Старый 06.08.2013, 14:23
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 22  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Цитата:
Это ссылка на экземпляр Лоадера
Ах, вот оно что.
То есть три экземпляра сгенерились, переменная исчезла, а они висят в воздухе.
Я всё забываю, что и такие эфемерные классы как лоадер всё-таки имеют осязаемые экземпляры, а не фантомную абстрактную муть.

Цитата:
(которой к тому времени и в этом месте вообще не может быть, на то она и локальная, что существует/видна только локально в той функции, в которой была объявлена, и существует только ту сотую миллисекунды, пока отрабатывает функция).
Ну в первоначальной версии переменная же объявлена как свойство класса, пусть и private, то есть, если я правильно помню главу про scope, она видна внутри всех функций этого класса.

Старый 06.08.2013, 16:31
Котейка вне форума Посмотреть профиль Отправить личное сообщение для Котейка Найти все сообщения от Котейка
  № 23  
Ответить с цитированием
Котейка
 
Аватар для Котейка

Регистрация: Aug 2013
Сообщений: 56
Цитата:
Сообщение от Fogflasher Посмотреть сообщение
Мм, что значит глобальная переменная класса, вы наверное имеете ввиду, что:
Код AS3:
            private var imageCounter:uint = 0; //убрать под шконку
			private var imageLoader:Loader;  //убрать под шконку
 
			private var BitData:BitmapData;  //убрать под шконку
			private var BitItem:Bitmap;        //убрать под шконку
 
			private var _picArray:Array; //сделать public, а не private
 
                        ...
Хотя, что это меняет, в чем заключается "по хорошему" при такой реализации, не очень понятно.
Это меняет то что не будет пресловутого счетчика и лишних ссылок. На последние лоадер и битмапу. А чем меньше ссылок - тем меньше вероятность того, что вы забудете про нее при удалении объекта. А сделать свойство паблик, а не приват я не имел ввиду, упаси боже
Вот так как-то:
Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
 
	public class ImageArrayLoader extends Sprite 
	{
		public static const ALL_LOADED:String = "all_loaded";
		private static const LOADINGS_COUNT:int = 3;
		private var _images:Vector.<Bitmap>;
 
		public function ImageArrayLoader():void 
		{
			_images = new Vector.<Bitmap>;
			addEventListener(ALL_LOADED, addToScreen);
			for (var i:int = 1; i <= LOADINGS_COUNT; i++) 
			{
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadedItem);
				loader.load(new URLRequest("text" + i.toString() + ".png"));
			}
		}
 
		private function loadedItem(e:Event):void 
		{
			e.currentTarget.removeEventListener(Event.COMPLETE, loadedItem);
			_images.push(e.currentTarget.content as Bitmap);
			if (_images.length >= LOADINGS_COUNT) dispatchEvent(new Event(ALL_LOADED));
		}
 
		private function addToScreen(e:Event):void 
		{
			removeEventListener(ALL_LOADED, addToScreen);
			for (var i:int = 0; i < _images.length; i++) 
			{
				_images[i].x = i * 10;
				_images[i].y = i * 30;
				addChild(_images[i]);
			}
		}
	}
}
Но хочу сказать, что и этот класс не совсем правилен, в том плане, что он не универсален. Но это уже другая история
Ну и еще, что не отслеживается возможность возникновения ошибки и что в вашей реализации, что в моей если хоть одна картинка из списка не загрузится то картинки никогда не будут добавлены на экран.


Последний раз редактировалось Котейка; 06.08.2013 в 16:47.
Старый 06.08.2013, 16:53
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 24  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Ну в первоначальной версии переменная же объявлена как свойство класса, пусть и private, то есть, если я правильно помню главу про scope, она видна внутри всех функций этого класса.
Верно. Только вот ссылок на переменные не бывает))) Ссылка указывает на объект в памяти. Переменные хранят эти ссылки (или в случае простых типов String и Number — само значение, строку или число). Переменные не являются объектами, и ссылаться на них невозможно. То есть Event#currentTarget никак не может ссылаться на переменную imageLoader, которая ссылается на последний лоадер (или на что-то другое? она же переменная!).
__________________
Reality.getBounds(this);

Старый 07.08.2013, 05:35
namespaces вне форума Посмотреть профиль Отправить личное сообщение для namespaces Найти все сообщения от namespaces
  № 25  
Ответить с цитированием
namespaces
 
Аватар для namespaces

Регистрация: Jan 2013
Сообщений: 126
Хочу обратиться к автору, а не проще ли использовать либу LoaderMax и готовый класс ImageLoader, и не возиться с этими бубнами.

Старый 07.08.2013, 15:21
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 26  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Котейка, большое спасибо за готовый код! Правда при компилляции во Flash CS3 он выдает ошибку:
Цитата:
1084: Syntax error: expecting identifier before lessthan. private var _images:Vector.<Bitmap>;
Я не знаю что это за Векторы, у Мука вроде небыло такого. Может это уже специфика Флэш Девелопера?
Код интересный, я почти всё понял. Смущает, разве что, строка где находится
Цитата:
dispatchEvent(new Event(ALL_LOADED));
Чисто технически понятно, что она вызывает функцию addToScreen, но какбы интересно как можно додуматься до такого финта (с опытом перечитывания главы про события наверное приходит : )

Wolsh, ценное замечание, вот как раз такие простые базовые вещи и остаются неосмысленными подчас.
Я чисто автоматически предполагал, что всё в конечном счете является объектом и сводится к классу Object, например.
Хотя конкретно о переменных не задумывался в этом контексте.

Цитата:
Сообщение от namespaces Посмотреть сообщение
Хочу обратиться к автору, а не проще ли использовать либу LoaderMax и готовый класс ImageLoader, и не возиться с этими бубнами.
Могу предположить, что да : ) Но, я вообще новичок в AS3.0, и даже не знаю, как это делается.
Не могли бы вы рассказать чуть подробнее, где взять эту библиотеку и как ее интегрировать в проект (или может в сам флэш)?

Старый 07.08.2013, 16:19
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 27  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Но, я вообще новичок в AS3.0, и даже не знаю, как это делается.
Если Вы хотите учится, то не нужно не каких библиотек! Вот когда Вы поймёте, что сами уже во всё разбираетесь хотя бы процентов на пятьдесят, вот тогда скачивайте, несколько дней учите и проверяйте весь код, а уже потом решайте - использовать всё или написать самому по такому же принципу.

Добавлено через 24 минуты
Когда решите сами сделать какой нибудь хороший и как это называется универсальный загрузчик, то вернитесь в эту тему и изучите вот этот загрузчик https://github.com/arthur-debert/BulkLoader . Мне эта ссылка очень пригодилась.

Старый 07.08.2013, 17:01
Котейка вне форума Посмотреть профиль Отправить личное сообщение для Котейка Найти все сообщения от Котейка
  № 28  
Ответить с цитированием
Котейка
 
Аватар для Котейка

Регистрация: Aug 2013
Сообщений: 56
Fogflasher дело в том, что Flash CS3 компилит под 9й плеер, а вектора появились только в 10м Его можно заменить на обычный массив, будет все так же. Вектора просто работают чуть по-шустрее за счет заранее известного типа их содержимого.
Цитата:
Чисто технически понятно, что она вызывает функцию addToScreen, но какбы интересно как можно додуматься до такого финта
Ну на самом деле это никакой не финт, рассылка события это очень часто употребимая операция.
Что касательно LoaderMax. Это либа зеленых носков http://www.greensock.com/loadermax/ там у них еще много интересного есть. Но как правильно заметил Akopalipsis не нужно библиотек, если вы хотите учиться.

Старый 07.08.2013, 17:02
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 29  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Котейка а он бесплатный?)

Старый 07.08.2013, 19:24
namespaces вне форума Посмотреть профиль Отправить личное сообщение для namespaces Найти все сообщения от namespaces
  № 30  
Ответить с цитированием
namespaces
 
Аватар для namespaces

Регистрация: Jan 2013
Сообщений: 126
Цитата:
Сообщение от Fogflasher Посмотреть сообщение
Но, я вообще новичок в AS3.0, и даже не знаю, как это делается.
Не могли бы вы рассказать чуть подробнее, где взять эту библиотеку и как ее интегрировать в проект (или может в сам флэш)?
Там все просто. Перейдите сюда, скачайте либу, на правой стороне Download AS3. Пройдитесь по страничке, там очень много полезных примеров.
Не побоюсь сказать, что TweenMax для флеша как стандарт де факто, либа которая должна быть у всех по умолчанию. Иначе о какой либо продуктивности и удобности речи не может быть.

Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Когда решите сами сделать какой нибудь хороший и как это называется универсальный загрузчик, то вернитесь в эту тему и изучите вот этот загрузчик https://github.com/arthur-debert/BulkLoader . Мне эта ссылка очень пригодилась.
Ваш универсальный мега загрузчик последний раз обновлялся в июне 2009 го года)

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
array , loader as3 , загрузка , Изображения , массив
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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