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

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

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

Регистрация: Oct 2012
Сообщений: 14
По умолчанию Проблема с созданием внутреннего прелоадера во Flash Builder 4.7

Добрый день. С этой проблемой уже намучался пару дней, но нормального решения проблемы так и не нашел. До того как спрашивать, прочитал множество постов связанных с этой темой и на этом форуме тоже, но не помогло. В чем суть, т.к. флексовый мета-тег [Frame(factoryClass)] во Flash Builder 4.7 уже не поддерживается, выходит ошибка 1065 Variable Main is not defined, я использовал в данном случае ключ компилятора -frame two Main - где Main имя документ-класса. Так вот в кач-ве примера работы прелоадера взял игру написанную с использованием движка flixel. В кач-ве документ-класса сделал класс игры Mode.as. Протестировал работу прелоадера вначале в Adobe Flash CS4 в опции View - Simulate Download, так вот полосы загрузки я не увидел, вначале появился белый экран, а затем саму игра. Далее попробовал сделать класс Preloader.as документ-классом, и это тоже не решило проблему. Затем использовал в denwer вместе с Charles HTTP Debug Proxy в нем есть опция throttling c заданием пропускной способности. В этом случае тоже не увидел полосу загрузки. По этому поводу я записал видео, в котором показывается, как я тестировал работу прелоадера в Flash IDE. Вообщем народ не могли вы подробным образом описать в чем может быть проблема и как её решить.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Мета тэги не зависят от среды исполнения, они вшиты во флекс СДК, в компилятор.
Простой прелоадер можно сделать так (на примере измененного темплейта FlashDevelop)
Мейн класс (точка входа в программу, обычно обозначается отличным от других классов значком):
Код AS3:
package 
{
	[Frame(factoryClass = "Preloader")]
	public class Main extends Sprite 
	{
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
		}
	}
}
Класс Preloader (в том же пакете, что и Main.as)
Код AS3:
package 
{
	public class Preloader extends Sprite 
	{
		public function Preloader() 
		{
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
 
			// TODO show loader
		}
 
		private function ioError(e:IOErrorEvent):void 
		{
 
		}
 
		private function progress(e:ProgressEvent):void 
		{
			var percentage:Number = e.bytesLoaded / e.bytesTotal;
			if(percentage == 1)
			{
				loadingFinished();
			}
		}
 
		private function loadingFinished():void 
		{
			loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);
 
			// TODO hide loader
			startup();
		}
 
		private function startup():void 
		{
			var mainClass:Class = getDefinitionByName("Main") as Class;
			addChild(new mainClass() as DisplayObject);
		}
	}
}


Последний раз редактировалось KumoKairo; 30.08.2013 в 15:21.
Старый 30.08.2013, 15:33
gadzhimari вне форума Посмотреть профиль Отправить личное сообщение для gadzhimari Найти все сообщения от gadzhimari
  № 3  
Ответить с цитированием
gadzhimari

Регистрация: Oct 2012
Сообщений: 14
Цитата:
Сообщение от KumoKairo Посмотреть сообщение
Мета тэги не зависят от среды исполнения, они вшиты во флекс СДК, в компилятор.
Простой прелоадер можно сделать так (на примере измененного темплейта FlashDevelop)
Мейн класс (точка входа в программу, обычно обозначается отличным от других классов значком):
Вообще-то в Flash Builder 4.7 в кач-ве SDK используется AIR SDK. У меня стоит версия 3.7 и вроде как мета-тэг Frame(factoryClass)] не должен работать. Об этом ещё говорилось на форуме старлинга.

KumoKairo, не помогло. До того как спрашивать я пробовал этот стандартный FD прелоадер. Кто-нибудь вообще здесь может дать нормальный работающий пример с прелоадером вместе с прогресс-баром на чистом AS3.0 без Flash IDE. Исходник прикреплен к сообщению вариант описанный KumoKairo с дополненным кодом прогресс бара.
Вложения
Тип файла: 7z preloader.7z (7.22 Мб, 47 просмотров)


Последний раз редактировалось gadzhimari; 30.08.2013 в 15:51.
Старый 30.08.2013, 16:49
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 4  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Специально скачал флешбилдер посмотреть что там и как - оказалось все просто, логика правда немного другая
Вместо добавления кадра - прелоадера на Sprite - мейн класс, мы делаем сам мейн класс прелоадером - MovieClip, в который вставляем кадр с реальной точкой входа нашего приложения. После загрузки всего остального содержимого просто переходим на другой кадр, получив дефинишн по имени класса, предварительно добавив его в качестве аргумента компилятора:
Цитата:
-frame two,PseudoMain
PreloaderProject.zip

Обращу внимание на то, что пустой проект грузится моментально, поэтому прогресс бара видно не будет. Чтобы увидеть прогресс бар, можно добавить большой файл на второй кадр и залить на хостинг.
Работоспособность подтверждает трейс процесса загрузки.
Все работает

Главное правило с прелоадерами - ни в коем случае не импортировать ненужные классы, иначе первый кадр потянет за собой все ресурсы приложения, что полностью убьет смысл прелоадера

Старый 30.08.2013, 17:33
gadzhimari вне форума Посмотреть профиль Отправить личное сообщение для gadzhimari Найти все сообщения от gadzhimari
  № 5  
Ответить с цитированием
gadzhimari

Регистрация: Oct 2012
Сообщений: 14
KumoKairo, большое спасибо за помощь. Действительно прелоадер работает. Моей ошибкой было то, что я делал документ-классом не класс прелоадера. Только вот не мог ты посмотреть на этот прелоадер и сказать в чем может быть проблема. Т.е.

Я делаю класс Preloader документ-классом. В настройках проекта пишу -frame two Mode, но вот линии загрузки не вижу.

Код AS3:
package
{
	import org.flixel.system.FlxPreloader;
 
        [SWF(width="640", height="480", backgroundColor="#000000")]
	public class Preloader extends FlxPreloader
	{
		public function Preloader():void
		{
			className = "Mode";
			super();
		}
	}
}
Код AS3:
package
{
	import org.flixel.*;
 
	public class Mode extends FlxGame
	{
		public function Mode():void
		{
			super(320,240,MenuState,2,50,50);
			forceDebugger = true;
		}
	}
}
Вот архив
Вложения
Тип файла: 7z Mode.7z (722.6 Кб, 27 просмотров)

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Слишком быстро грузится проект, условие
Код AS3:
if((framesLoaded >= totalFrames) && (time > _min))
выполнится при первом проходе по обработчику onEnterFrame

Вот закинул ту же демку на удаленный сервак (добавил в СВФ аудио файл размером 10 мб), прелоадер работает как положено
После первой загрузки флешка кешируется и сценка с прелоадером быстро проскакивает


Последний раз редактировалось KumoKairo; 30.08.2013 в 19:23.
Старый 30.08.2013, 19:25
gadzhimari вне форума Посмотреть профиль Отправить личное сообщение для gadzhimari Найти все сообщения от gadzhimari
  № 7  
Ответить с цитированием
gadzhimari

Регистрация: Oct 2012
Сообщений: 14
Цитата:
Сообщение от KumoKairo Посмотреть сообщение
Слишком быстро грузится проект, условие
Код AS3:
if((framesLoaded >= totalFrames) && (time > _min))
выполнится при первом проходе по первому обработчику onEnterFrame

Вот закинул ту же демку на удаленный сервак (добавил в СВФ аудио файл размером 10 мб), прелоадер работает как положено
После первой загрузки флешка кешируется и сценка с прелоадером быстро проскакивает
действительно работает. Ещё раз спасибо. Только вот один момент не понятен, почему данная swf на серваке показывает линию загрузки, а вот при тестировании в Flash IDE через Simulate Download, только белый экран.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Не тестируйте через флеш иде)
Сделайте фиктивную функцию загрузки для отладки. Которая, скажем, раз в 100 мс будет выкидывать "событие" загрузки очередных 15% приложения. На деле приложение, конечно, давно будет загружено, но обработчку onProgress (или onEnterFrame как в случае с Фликселем) совершенно все равно откуда брать данные для отображения.

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

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

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


 


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


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