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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 20.12.2006, 17:55
ALiEN_2OO6 вне форума Посмотреть профиль Отправить личное сообщение для ALiEN_2OO6 Найти все сообщения от ALiEN_2OO6
  № 15  
Ответить с цитированием
ALiEN_2OO6
 
Аватар для ALiEN_2OO6

Регистрация: Nov 2006
Сообщений: 25
Отправить сообщение для ALiEN_2OO6 с помощью ICQ
Вот на скорую руку накидал:

Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete = "initApp()">
<mx:Image x="10" y="10" width="711" height="606" id="myImage"/>

	<mx:Script>
        <![CDATA[

            public function initApp():void {
            	
            	
            	var a = new StreamLoader(new URLRequest('http://lab.orangeflash.eu/flex2/examples/partialImageloader/Image2.jpg'));
           		myImage.addChild(a);
           		//myImage.scaleX = 0.1;
           		//myImage.scaleY = 0.1;
            	
            }
            
        ]]>
    </mx:Script>

	
</mx:Application>
Код:
package
{
	import flash.display.Loader;
	import flash.events.*;
	import flash.net.*;
	import flash.utils.*;
	import flash.system.LoaderContext;
	
	[Event(name = "complete", type="flash.events.Event")]
	[Event(name = "progress", type="flash.events.ProgressEvent")]
	[Event(name = "open", type="flash.events.Event")]
	[Event(name = "ioError", type="flash.events.IOErrorEvent")]
	
	public class StreamLoader extends Loader
	{
		protected var stream:URLStream = new URLStream();
		protected var bytes:ByteArray = new ByteArray();
		protected var cont:LoaderContext;
		
		import mx.core.UIComponent
		/**
		 * Constructor, creates new StreamLoader
		 * 
		 */
		public function StreamLoader(request:URLRequest = null)
		{
			if(request != null)
			{
				loadStream(request);
			}
		}
		/**
		 * Method, loads images as stream
		 * 
		 * @param	request		URLRequest
		 * @param	context		LoaderContext, default value is null
		 */
		public function loadStream(request:URLRequest, context:LoaderContext = null):void
		{
			cont = context;
			
			stream.load(request);
			
			stream.addEventListener(Event.COMPLETE,onStreamComplete);
			stream.addEventListener(ProgressEvent.PROGRESS,onStreamProgress);
			stream.addEventListener(Event.OPEN,onStreamOpen);
			stream.addEventListener(IOErrorEvent.IO_ERROR,onStreamIOError);
			stream.addEventListener(HTTPStatusEvent.HTTP_STATUS,onStreamHTTPStatus);
			stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onStreamSecurityError);
		}
		/**
		 * @private
		 */
		private function onStreamComplete(event:Event):void
		{
			updateBytes();
			dispatchEvent(new Event(event.type, event.bubbles, event.cancelable));
			
			setTimeout(confirmBytesLoaded,1);			
		}
		/**
		 * @private
		 */
		private function onStreamProgress(event:ProgressEvent):void
		{
			updateBytes();
			if(bytes.length > 20000)stream.close();
			dispatchEvent(new ProgressEvent(event.type, event.bubbles,
											event.cancelable, event.bytesLoaded, 
											event.bytesTotal));
			
		}
		/**
		 * @private
		 */
		private function onStreamIOError(event:IOErrorEvent):void
		{
			dispatchEvent(new IOErrorEvent(event.type, event.bubbles, event.cancelable, event.text));
		}
		/**
		 * @private
		 */
		private function onStreamSecurityError(event:SecurityErrorEvent):void
		{
			dispatchEvent(new SecurityErrorEvent(event.type, event.bubbles, event.cancelable, event.text));
		}
		/**
		 * @private
		 */
		private function onStreamHTTPStatus(event:HTTPStatusEvent):void
		{
			dispatchEvent(new HTTPStatusEvent(event.type, event.bubbles, event.cancelable, event.status));
		}
		/**
		 * @private
		 */
		private function onStreamOpen(event:Event):void
		{
			dispatchEvent(new Event(event.type, event.bubbles, event.cancelable));
		}
		/**
		 * @private
		 */
		private function updateBytes():void
		{
			stream.readBytes(bytes, bytes.length);
			if(bytes.length > 0)
			{
				loadBytes(bytes,cont);
			}
		}
		/**
		 * @private
		 * 
		 * Method confirms that all bytes loaded, and closes stream
		 */
		private function confirmBytesLoaded():void
		{
			updateBytes();
			stream.close();
		}
		
	}
}
В данном примере, я просто обрубаю поток, по достижении 20000 загруженных байт. Т.к. Евент срабатывает с разной периодичностью, рекомендую потыкать F5 в примере, и посмотреть что именно загружается в myImage. Поставленная задача решена. Единственное конечно надо это до ума довести, например, что бы четко срабатывал евент на определенном этапе, а не так как сейчас.
__________________
А что я? Я сам в шоке!

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

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

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


 


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


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