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

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

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

Регистрация: May 2009
Сообщений: 122
По умолчанию Вывод процента загрузки

Здравсвуйте
Есть код
Код AS3:
package 
{
	import flash.display.*;
	import flash.net.URLRequest;
	import flash.events.*;
	import flash.text.*;
	import flash.text.TextFormat;
	import flash.text.Font;
 
	public class Main extends Sprite
	{
		//---------------------------------------
		// CLASS CONSTANTS
		//---------------------------------------
 
		public static const APP_VERSION:String = "Loadin 0.1 - June 20, 2011";
 
		//---------------------------------------
		// PRIVATE VARIABLES
		//---------------------------------------
 
		private var loader:Loader;		
		private var progressOutput:TextField;	
		private var progressOutputFormat = new TextFormat();		
		private var load_mc:MovieClip;
 
		//---------------------------------------
		// CONSTRUCTOR
		//---------------------------------------
 
		public function Main()
		{		
			trace(APP_VERSION);
 
			createLoader();
			createProgressIndicator();
 
			load( new URLRequest("Module.swf") );			
		}
 
		//---------------------------------------
		// PRIVATE METHODS
		//---------------------------------------
 
		private function createLoader():void
		{
			loader = new Loader();
 
			loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, progressListener );
			loader.contentLoaderInfo.addEventListener( Event.COMPLETE, completeListener );
			loader.contentLoaderInfo.addEventListener( Event.INIT, initListener );
 
			loader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, ioErrorListener );
		}
 
		private function createProgressIndicator():void
		{			
			progressOutputFormat.size = 18;
			progressOutputFormat.color = 0x00334D;
			progressOutputFormat.font = "Arial";
 
			progressOutput = new TextField();					
			//progressOutput.text = "LOADING ...";
			progressOutput.defaultTextFormat = progressOutputFormat;
			progressOutput.x = stage.stageWidth / 2 - 80;
			progressOutput.y = stage.stageHeight / 2 - 40;
			progressOutput.width = 200;
 
			 var bytes_Loaded:Number = stage.loaderInfo.bytesLoaded;
            // перемнная, хранящая число загруженых байт нашего мувика
            var bytes_Total:Number = stage.loaderInfo.bytesTotal;
            // переменная, хранящая обьём фильма (в байтах)
            var s:String = "";
            var percent:Number = 0;
 
			if ( bytes_Total > 0 )
			{
				// проверяем, узнал ли фильм о своём молном размере, чтобы мы не делили на ноль
				percent = Math.floor( bytes_Loaded / bytes_Total * 100 );
				//Считаем сколько процентов уже загрузилось, округляем до целых
 
				s = percent+"%"
 
				trace(s)
			}
 
			load_mc = new Load_mc();
			load_mc.x = stage.stageWidth / 2;
			load_mc.y = stage.stageHeight / 2;
			addChild(load_mc);			
 
		}
 
		private function load( urlRequest:URLRequest ):void
		{
			loader.load(urlRequest);
 
			if( !contains(progressOutput) )
			{
				addChild(progressOutput)
			}
		}
 
		private function progressListener(e:ProgressEvent):void
		{
			progressOutput.text = "LOADING: " + Math.floor(e.bytesLoaded / 1024) + "/" + Math.floor(e.bytesTotal / 1024) + "KB";						
		}
 
 
		private function initListener(e:Event):void
		{			
			MovieClip(loader.content).stop();
		}
 
		private function completeListener(e:Event):void
		{
 
			addChild(loader.content);
			MovieClip(loader.content).play();
			removeChild(progressOutput);
			removeChild(load_mc);
		}
 
		private function ioErrorListener(e:IOErrorEvent):void
		{
			progressOutput.text = "LOAD ERROR";
		}	
 
	}  // end class	
}  //  end package
Проблема в том, что переменная s в trace(s) должна выводить процент загрузки , а она выводит сразу 100% почему так ?
Вот с ф-ей все ок
Код AS3:
private function progressListener(e:ProgressEvent):void
		{
			progressOutput.text = "LOADING: " + Math.floor(e.bytesLoaded / 1024) + "/" + Math.floor(e.bytesTotal / 1024) + "KB";						
		}
Выводит как положено, а проценты не хочет

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

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Есть особенность одна. Если Main это Document class, то конструктор Main у вас будет вызван только после полной загрузки первого кадра флэшки. Вполне возможно, все что у вас есть - находится в первом кадре Тогда естественно слушатель прогресса вызывается после всего.

Прелоадер и Main должны быть реализованы отдельно. На пример так:
Прелоадер лежит на первом кадре, а основная часть флэшки лежит на кадрах начиная со второго.

Старый 20.06.2011, 15:33
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 3  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от kackbip Посмотреть сообщение
Есть особенность одна. Если Main это Document class, то конструктор Main у вас будет вызван только после полной загрузки первого кадра флэшки. Вполне возможно, все что у вас есть - находится в первом кадре Тогда естественно слушатель прогресса вызывается после всего.

Прелоадер и Main должны быть реализованы отдельно. На пример так:
Прелоадер лежит на первом кадре, а основная часть флэшки лежит на кадрах начиная со второго.
ТАк и есть, прелоадер в классе Майн, а сама флешка подгружается отдельно

Добавлено через 4 минуты
я ф-юю изменил на
Код AS3:
private function progressListener(e:ProgressEvent):void
		{
			progressOutput.text = "LOADING: " + Math.floor(e.bytesLoaded / e.bytesTotal) * 100 + "%";
 
		}
флеш выводит 0 , но ролик грузится и при загрузке начинает воспроизводиться, а проценты все равно не считаются, на нуле остаются и при воспроизведении ролика , как и положенно убираются

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

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Ой, ё-моё.
Надо же сначала на 100 умножать, а потом делать Math.floor

Старый 20.06.2011, 15:44
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 5  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от kackbip Посмотреть сообщение
Ой, ё-моё.
Надо же сначала на 100 умножать, а потом делать Math.floor
Rакая разница, у меня умножение происходит за скобками и к Math.floor не имеет отношения

Старый 20.06.2011, 15:47
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 6  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Ну конечно никакой разницы
Код AS3:
Math.floor(e.bytesLoaded / e.bytesTotal)
это выражение у вас всегда равно нулю, кроме момента полной загрузки.

Старый 20.06.2011, 15:49
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 7  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от kackbip Посмотреть сообщение
Ну конечно никакой разницы
Код AS3:
Math.floor(e.bytesLoaded / e.bytesTotal)
это выражение у вас всегда равно нулю, кроме момента полной загрузки.
я понял код, как вы и сказали
Код AS3:
progressOutput.text = "LOADING: " + 100 * Math.floor( e.bytesLoaded / e.bytesTotal ) + "%";
Только ничего не изменилось, как было 0 так и осталось

Старый 20.06.2011, 15:50
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 8  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Ну детский сад
Код AS3:
progressOutput.text = "LOADING: " + Math.floor( 100 * e.bytesLoaded / e.bytesTotal ) + "%";

Старый 20.06.2011, 15:51
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 9  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от kackbip Посмотреть сообщение
Ну детский сад
Код AS3:
progressOutput.text = "LOADING: " + Math.floor( 100 * e.bytesLoaded / e.bytesTotal ) + "%";
Ну я ДЕБИЛ ! Спасибо большое !

Старый 20.06.2011, 19:21
S-ed вне форума Посмотреть профиль Отправить личное сообщение для S-ed Найти все сообщения от S-ed
  № 10  
Ответить с цитированием
S-ed
 
Аватар для S-ed

Регистрация: Jul 2001
Адрес: SPb.RU
Сообщений: 148
Отправить сообщение для S-ed с помощью ICQ
Тред порадовал. =)

DarkKnight2009
Без обид, у всех бывает. =Р
__________________
RTFM

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

Теги
bytesTotal , loadbytes , loader as3

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

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


 


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


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