Показать сообщение отдельно
Старый 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.