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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.10.2008, 21:11
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 1  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
По умолчанию Подгрузка картинок в цикле

Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.net.URLRequest;
	import fl.transitions.Tween;
	import fl.transitions.easing.*;

	public class LoaderExample extends Sprite {

		private var url:String;
		private var mc:MovieClip;
		private var i:int;
		private var loader:Loader;


		public function LoaderExample() {

			for (i=1; i<11; i++) {
				url="ico/ico"+i+".jpg";
				loader = new Loader();
				mc = new MovieClip();
				configureListeners(loader.contentLoaderInfo);
				loader.addEventListener(MouseEvent.CLICK, clickHandler);

				var request:URLRequest = new URLRequest(url);
				loader.load(request);
				mc.addChild(loader);

				addChild(mc);
				mc.alpha=0;
				mc.x=+10
			}
		}

		private function configureListeners(dispatcher:IEventDispatcher):void {
			dispatcher.addEventListener(Event.COMPLETE, completeHandler);
			dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
			dispatcher.addEventListener(Event.INIT, initHandler);
			dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			dispatcher.addEventListener(Event.OPEN, openHandler);
			dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
			dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
		}

		private function completeHandler(event:Event):void {
			trace("completeHandler: " + event);

		}

		private function httpStatusHandler(event:HTTPStatusEvent):void {
			trace("httpStatusHandler: " + event);
		}

		private function initHandler(event:Event):void {
			trace("initHandler: " + event);
			var twa:Tween = new Tween(mc,"alpha",Strong.easeOut,0,100,10000,false);
		}

		private function ioErrorHandler(event:IOErrorEvent):void {
			trace("ioErrorHandler: " + event);

		}

		private function openHandler(event:Event):void {
			trace("openHandler: " + event);
		}

		private function progressHandler(event:ProgressEvent):void {
			trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
		}

		private function unLoadHandler(event:Event):void {
			trace("unLoadHandler: " + event);
		}

		private function clickHandler(event:MouseEvent):void {
			trace("clickHandler: " + event);
			var loader:Loader = Loader(event.target);
		}
		private function visibleTrue(event:Event):void {

		}
	}
}
Народ, помогите, я взял пример из helpa loader а который грузит картинку.
Но мне нужно в цикле создать несколько мувиков, в каждый из них подгрузить картинку и сдвинуть ее вниз...
но у меня почему то загружается только последняя картинка...в as3 новичок, так что не пинайте
Я так понял нужно к каждому мувику прицепить лоадер, но не могу пока сообразить как это сделать...
И еще так понимаю что все действия с мувиком такие как прицепить слушателя и сдвинуть и т.п нужно делать при инициализации...привожу весь код, потому что не уверен даже что все пакеты импортированы какие нужны...

Старый 29.10.2008, 22:00
_Smirnoff вне форума Посмотреть профиль Отправить личное сообщение для _Smirnoff Найти все сообщения от _Smirnoff
  № 2  
Ответить с цитированием
_Smirnoff
 
Аватар для _Smirnoff

блогер
Регистрация: Jul 2007
Адрес: Russia
Сообщений: 292
Записей в блоге: 5
Создаешь одну процедуру загрузки.На complete и failure вешаешь запуск этой же процедуры и считаешь кол-во загрузок...
__________________
Оптимизация производительности на уровне кода

Старый 29.10.2008, 22:10
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 3  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
в вашем коде все загрузки начинаются параллельно. это не есть хорошо (так как в виндовз поумолчанию одновременно можно открыть не более 10 tcp соединени.)
к томуже не совсем понятна роль mc. попробуйте добавлять прямо на сцену.
если не поможет, попробуй что-то типа этого.
Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.net.URLRequest;
	import fl.transitions.Tween;
	import fl.transitions.easing.*;

	public class LoaderExample extends Sprite {

		private var url:String;
		private var i:int;
		private var curX:int;
		private var loader:Loader;


		public function LoaderExample() {
			i = 1;
			curX = 0;
			url="ico/ico"+i+".jpg";
			loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
			var request:URLRequest = new URLRequest(url);
			loader.load(request);
		}

		private function completeHandler(event:Event):void {
			trace("completeHandler: " + event);
			var tmp:DisplayObject = event.target as DisplayObject;
			addChild(tmp);
			//здесь надо листенер удалить!!!! не буду врать - не помню как:)
			++i;
			loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
			var request:URLRequest = new URLRequest(url);
			loader.load(request);
		}
	}
}
не проверял. может работать не будет. флеша под рукой нет.
__________________
я могу стать всем, если только захочу

Старый 30.10.2008, 00:15
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 4  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Сегодня всем пишу про BulkLoader

Старый 30.10.2008, 00:44
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 5  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
А что дальше?
addChild через фреймворк?

Старый 30.10.2008, 01:13
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 6  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
спасибо, большое, вроде как получилось:
Код:
public class LoaderExample extends Sprite {

		private var url:String;
		private var mc:MovieClip;
		private var i:int;
		private var loader:Loader;
		private var prevX:int;


		public function LoaderExample() {

			i=1;
			prevX=0
			;
			url="ico/ico"+i+".jpg";
			loader = new Loader();
			mc = new MovieClip();
			configureListeners(loader.contentLoaderInfo);
			loader.addEventListener(MouseEvent.CLICK, clickHandler);

			var request:URLRequest=new URLRequest(url);
			loader.load(request);
			mc.addChild(loader);

			addChild(mc);
			mc.alpha=1;
			mc.x=prevX;
			loader.unload();

		}

		private function configureListeners(dispatcher:IEventDispatcher):void {
			dispatcher.addEventListener(Event.COMPLETE, completeHandler);
			dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
			dispatcher.addEventListener(Event.INIT, initHandler);
			dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			//dispatcher.addEventListener(Event.OPEN, openHandler);
			dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
			//dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
		}

		private function completeHandler(event:Event):void {
			//trace("completeHandler: " + event);
			if (i<3) {
				i++;
				url="ico/ico"+i+".jpg";
				loader = new Loader();
				mc = new MovieClip();
				configureListeners(loader.contentLoaderInfo);
				loader.addEventListener(MouseEvent.CLICK, clickHandler);

				var request:URLRequest=new URLRequest(url);
				loader.load(request);
				mc.addChild(loader);

				addChild(mc);
				mc.alpha=1;
				mc.x=prevX+100;
				prevX=mc.x;
				loader.unload();
			}
		}

		private function httpStatusHandler(event:HTTPStatusEvent):void {
			//trace("httpStatusHandler: " + event);
		}
картинки грузятся, все ок... меня только напрягает двойной код в главной функции и при событии complete это так и должно быть или можно как нть покрасивее написать?
и еще вопрос как мне твин сделать - появление картинок при загрузке а то я могу ток объявить один только и он естесствеено не успев осуществиться объявляется еще раз и картинки получаются с разной альфой

Цитата:
Сегодня всем пишу про BulkLoader
Эээ не надо так издеваться над новичками - я с ума сойду прежде чем разберусь....


Последний раз редактировалось AlexDesinger; 30.10.2008 в 01:20.
Старый 30.10.2008, 01:44
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 7  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
>>картинки грузятся, все ок... меня только напрягает двойной код в главной функции и при событии complete это так и должно быть или можно как нть покрасивее написать?
и еще вопрос как мне твин сделать - появление картинок при загрузке а то я могу ток объявить один только и он естесствеено не успев осуществиться объявляется еще раз и картинки получаются с разной альфой
Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.ui.Mouse;
	import flash.text.*;
	import flash.net.*;
	import fl.transitions.Tween;
	import fl.transitions.TweenEvent;
	import fl.transitions.easing.*;

	public class Doc extends Sprite {
		var loader:Loader;
		var req:URLRequest;
		var count:int;
		var position:int;
		var path:String;
		var arr:Array;
		var sp:Sprite;
		var tween:Tween;
		var tr:Boolean;
		var i:int;
		function Doc() {
			path = 'http://www.dnadillo.dn.ua/images/imag/';
			arr = [
			   'magna_17_1024.jpg','magna_33_1024.jpg',
			   'magna_carta_078.JPG','magna_carta_115.JPG',
			   'magna_carta_126.JPG','magna_carta_127.JPG',
			   'magna_carta_131.JPG','magna_carta_133.JPG',
			   'magna_carta_140.JPG','magna_carta_141.JPG',
			   'magna_carta_144.JPG'
			   ];
			req = new URLRequest();
			count = 0;
			position = 0;
			tr = false;
			onward();
			tween = new Tween({i:0}, "i", Regular.easeOut, 0, 1, 10, true);
			tween.stop();
			tween.addEventListener(TweenEvent.MOTION_CHANGE, handleChange);
			tween.addEventListener(TweenEvent.MOTION_FINISH, fin);
		}
		function got(evt:Event) {
			sp = new Sprite();
			sp.addChild(loader);
			addChild(sp);
			sp.alpha = 0;

			count++;
			trace('комплект');
			onward();
			if (tr==false) {
				tr = true;
				tween.start();
			}
		}
		function ioErrorHandler(event:IOErrorEvent):void {
			count++;
			trace('Ошибка');
			onward();
		}
		function onward() {
			if (count < arr.length) {
				trace('Гружу');
				loader=new Loader();
				req.url=path + arr[count];
				loader.load(req);
				loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE,got);
			}
		}
		function handleChange(evt:TweenEvent):void {
			//tween.obj.i;
			for (i=0; i<this.numChildren; i++) {
				if (i==position) {
					sp = this.getChildAt(i) as Sprite;
					trace(sp);
					sp.alpha = tween.obj.i;
				}
				
			}
		}
		function fin(evt:TweenEvent):void {
			position++;
			tween.start();
			trace('Конец');
		}
	}
}

Старый 30.10.2008, 04:13
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 8  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
Alex Lexcuk, спасибо за пример оч красиво...
Народ, у меня все получилось, даже с твином внешне все выглядет вроде ничего, но главная проблема сейчас для меня зпихнуть этот лоадер в отдельный класс...

я делаю так:
Код:
Main.as
package {

	import LoaderExample

......
	public class Main extends MovieClip {
public function Main() {

			var lp:LoaderExample= new LoaderExample()
............
И собственно не понимаю почему, но картинки не отображаются...трэйсом выводится mc.x totalByte и т.д. но реально их не видно, а если закинуть код в главный класс, то все грузится как надо...подскажите

Старый 30.10.2008, 09:39
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 9  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Можно вынести легко код загрузщика в отдельный класс
Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.ui.Mouse;
	import flash.text.*;
	import flash.net.*;
	import fl.transitions.Tween;
	import fl.transitions.TweenEvent;
	import fl.transitions.easing.*;

	public class Doc extends Sprite {
		var loader:FerryLoader;
		var count:int;
		var position:int;
		var path:String;
		var arr:Array;
		var sp:Sprite;
		var tween:Tween;
		var tr:Boolean;
		var i:int;
		function Doc() {
			path = 'http://www.dnadillo.dn.ua/images/imag/';
			arr = [
			   'magna_17_1024.jpg','magna_33_1024.jpg',
			   'magna_carta_078.JPG','magna_carta_115.JPG',
			   'magna_carta_126.JPG','magna_carta_127.JPG',
			   'magna_carta_131.JPG','magna_carta_133.JPG',
			   'magna_carta_140.JPG','magna_carta_141.JPG',
			   'magna_carta_144.JPG'
			   ];
			count = 0;
			position = 0;
			tr = false;
			loader = new FerryLoader(this);
			loader.urlTrain(path+arr[count]);
			tween = new Tween({i:0}, "i", Regular.easeOut, 0, 1, 10, true);
			tween.stop();
			tween.addEventListener(TweenEvent.MOTION_CHANGE, handleChange);
			tween.addEventListener(TweenEvent.MOTION_FINISH, fin);
		}
		function onward() {
			sp = this.getChildAt(this.numChildren-1) as Sprite;
			sp.alpha = 0;
			count++;
			if (count < arr.length) {
				loader.urlTrain(path+arr[count]);
				if (tr==false) {
					tr = true;
					tween.start();
				}
			}
		}
		function handleChange(evt:TweenEvent):void {
			//tween.obj.i;
			for (i=0; i<this.numChildren; i++) {
				if (i==position) {
					sp = this.getChildAt(i) as Sprite;
					trace(sp);
					sp.alpha = tween.obj.i;
				}
			}
		}
		function fin(evt:TweenEvent):void {
			position++;
			tween.start();
			trace('Конец');
		}
	}
}
И класс загрузщика
Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.ui.Mouse;
	import flash.text.*;
	import flash.net.*;
	import fl.transitions.Tween;
	import fl.transitions.TweenEvent;
	import fl.transitions.easing.*;

	public class FerryLoader extends URLLoader {
		var req:URLRequest;
		var loader:Loader;
		var doc:Doc;
		var sp:Sprite;
		function FerryLoader(_doc:Doc) {
			doc=_doc;
			req=new URLRequest();
			dataFormat= URLLoaderDataFormat.BINARY;
			addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
			addEventListener(Event.COMPLETE,got);

		}
		function urlTrain(_str:String) {
			req.url=_str;
			try {
				load(req);
			} catch (error:Error) {
				trace("Unable to load requested document.");
			}
		}
		function got(evt:Event) {
			loader = new Loader;
			loader.loadBytes(this.data);

			sp=new Sprite();
			sp.addChild(loader);
			doc.addChild(sp);
			doc.onward();
		}
		function ioErrorHandler(event:IOErrorEvent):void {
			trace('Ошибка');
			doc.onward();
		}
	}
}


Последний раз редактировалось Alex Lexcuk; 30.10.2008 в 09:42.
Старый 31.10.2008, 01:48
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 10  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
ээх все равно не получается вынести не грузится и все ...объясните, пожалуйста принцип по которому это делается, т.е. есть ли общие принципы того, что должно остаться в главном коде а что можно вынести в отдельный код...и что и там и там дописать...или же нужно оснавательно учить as3 чтобы это понять?

на всякий случай напишу то что у меня сейчас есть

Main.as
Код:
Main.as
package {

	import LoaderExample

......
	public class Main extends MovieClip {
public function Main() {

			var lp:LoaderExample= new LoaderExample()
............
LoaderExample.as
Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.net.URLRequest;
	import fl.transitions.Tween;
	import fl.transitions.easing.*;

	public class LoaderExample extends MovieClip {

		private var url:String;
		private var mc:MovieClip;
		private var c:int;
		private var loader:Loader;
		private var prevvXX:int;
		//private var twa:Tween;

		public function LoaderExample() {
			c=1;
			prevvXX=0
			;
			url="ico/ico"+c+".jpg";
			loader = new Loader();
			mc = new MovieClip();
			configureListeners(loader.contentLoaderInfo);
			loader.addEventListener(MouseEvent.CLICK, clickHandler);

			var request:URLRequest=new URLRequest(url);
			loader.load(request);
			mc.addChild(loader);

			addChild(mc);
//			mc.alpha=1
			mc.x=prevvXX;
			mc.y=100;
			//twa=new Tween(mc,"alpha",Strong.easeOut,0,1,100,false);
			loader.unload();
			trace(mc.width)
		}

		private function configureListeners(dispatcher:IEventDispatcher):void {
			dispatcher.addEventListener(Event.COMPLETE, completeHandler);
			dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
			dispatcher.addEventListener(Event.INIT, initHandler);
			dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			dispatcher.addEventListener(Event.OPEN, openHandler);
			dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
			//dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
		}

		private function completeHandler(event:Event):void {
			//trace("completeHandler: " + event);
			if (c<3) {
				c++;
				url="ico/ico"+c+".jpg";
				loader = new Loader();
				mc = new MovieClip();
				configureListeners(loader.contentLoaderInfo);
				loader.addEventListener(MouseEvent.CLICK, clickHandler);

				var request:URLRequest=new URLRequest(url);
				loader.load(request);
				mc.addChild(loader);

				addChild(mc);
				mc.alpha=100;
				mc.x=prevvXX+100;
				mc.y=100;
				prevvXX=mc.x;
				loader.unload();
				//twa=new Tween(mc,"alpha",Strong.easeOut,0,1,100,false);
			}
		}

		private function httpStatusHandler(event:HTTPStatusEvent):void {
			//trace("httpStatusHandler: " + event);
		}

		private function initHandler(event:Event):void {
			//trace("initHandler: " + event);
		}

		private function ioErrorHandler(event:IOErrorEvent):void {
//			trace("ioErrorHandler: " + event);

		}

		private function openHandler(event:Event):void {
			//trace("openHandler: " + event);
		}

		private function progressHandler(event:ProgressEvent):void {
			trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
		}

		private function unLoadHandler(event:Event):void {
			//trace("unLoadHandler: " + event);
		}

		private function clickHandler(event:MouseEvent):void {
			//trace("clickHandler: " + event);
//			var loader:Loader=Loader(event.target);
		}
	}
}


Последний раз редактировалось AlexDesinger; 31.10.2008 в 01:51.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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