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

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

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

Регистрация: Oct 2013
Сообщений: 126
По умолчанию не работает preloader - белый экран

Здравствуйте!
В сети нашёл огромное количество обсуждений данный проблемы, но ни одно из решений не помогло. Вы моя последняя надежда, выручайте, пожалуйста!
Код пишу во FlashDevelop, графику импортирую его средствами через swc (галочка "Add to library").
Использую чуть модифицированную версию стандартного прелоадера FlashDevelop, который создаётся при выборе "AS3 Project with Preloader" при создании нового проекта.
Вот код прелоадера:
Код AS3:
package
{
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.utils.getDefinitionByName;
	import rc.TF;
 
	public class Loader extends MovieClip 
	{
 
		private var _txt:TF; // TF - это собственный класс для текста
 
		public function Loader() 
		{
			if (stage) {
				stage.color = 0x000000; // цвет сцены
				stage.scaleMode = 'showAll';
				stage.align = 'C';
			}
			addEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
 
			// Создаём индикатор
			_txt = new TF(360, 210, '', 14, 'center', 0xFFFFFF);
			addChild(_txt);
		}
 
		// Обновление индикатора
		private function progress(e:ProgressEvent):void {
			// вычисляем процент загрузки
			_txt.update('loading...\n' + int(e.bytesLoaded * .001) + '/8516kb');
		}
 
		// проверяем кадр (не проверяем bytesTotal, т.к. некоторые браузеры возвращают 0)
		private function checkFrame(e:Event):void 
		{
			if (currentFrame == totalFrames) {
				// загрузка закончилась, начинаем 
				loadingComplete();
			}
		}
 
		private function loadingComplete():void 
		{
			removeEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
			// убираем индикатор
			removeChild(_txt);
			_txt = null;
			startup();
		}
 
		private function startup():void 
		{
			// получаем ссылку на главный класс нашего приложения
            var mainClass:Class = getDefinitionByName("Game") as Class;
            // создаем объект главного класса
			addChild(new mainClass() as DisplayObject);
            // удаляем из stage прелодер
            //parent.removeChild(this);
		}
 
	}
 
}
Вот код основного класса:
Код AS3:
package {
 
	import flash.display.Sprite;
	import flash.events.Event;
 
	// вот эта строка сообщает компилятору,
    // что надо показать прелодер до тех пор пока все не загрузится
	[Frame(factoryClass = "Loader")]
	public class Game extends Sprite {	
 
		// ТУТ РАЗНЫЕ СВОЙСТВА КЛАССА
 
		// CONSTRUCTOR
		public function Game():void {
			if (stage) { init() } else { addEventListener(Event.ADDED_TO_STAGE, init) };
		}
 
		// INIT
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			// точка входа в игру
		};
 
		// ДАЛЬШЕ РАЗНЫЕ ФУНКЦИИ
};
При запуске из FlashDevelop прелоадер проходит мгновенно. Но при загрузке с сервера появляется белый экран, а через несколько секунд игра включается сразу, минуя прелоадер (на самом деле, он, видимо, всё же, включается, но, опять же, на мгновение).
Насколько я понимаю, проблема в том, что всё грузится до прелоадера, но почему это происходит, не пойму.

Пожалуйста, помогите! Почему не работает прелоадер и как это исправить?

Добавлено через 29 минут
Всё, нашёл, кажется... Дело было в обращении к классу TF - внутри него была ссылка на шрифт, который входит в библиотеку. Видимо из-за обращения к элементу библиотеки она начинала грузиться полностью. Вставил индикацию через простое TextField и всё заработало.

Старый 14.06.2016, 10:35
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
На всякий случай не делай больше такого определения загрузки. Все, что связано с checkFrame реализуй с помощью честного COMPLETE.
__________________
Поймай яблоко 2!

Старый 14.06.2016, 20:07
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 3  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от Zebestov Посмотреть сообщение
На всякий случай не делай больше такого определения загрузки. Все, что связано с checkFrame реализуй с помощью честного COMPLETE.
Извиняюсь, не понял, о чём речь. Я использовал стандартный flashdevelopский прелоадер. Что в нём (или у меня) неправильно, поясните, пожалуйста

Старый 14.06.2016, 20:54
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Ну ты же используешь событие PROGRESS? Вот подпишись еще и на COMPLETE, чтобы определять, когда флешка загрузилась. Иногда bytesLoaded и(или) bytesTotal определяются некорректно, что приводит к "бесконечной загрузке". В свое время много игр на порталах так позависало.
__________________
Поймай яблоко 2!

Старый 16.06.2016, 01:05
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 5  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Ну ты же используешь событие PROGRESS? Вот подпишись еще и на COMPLETE, чтобы определять, когда флешка загрузилась. Иногда bytesLoaded и(или) bytesTotal определяются некорректно, что приводит к "бесконечной загрузке". В свое время много игр на порталах так позависало.
C таким подходом выходит, что ENTER-FRAME вообще не нужен?

Старый 16.06.2016, 08:27
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от a7s1h1 Посмотреть сообщение
C таким подходом выходит, что ENTER-FRAME вообще не нужен?
Здесь — похоже да, не нужен.
__________________
Поймай яблоко 2!

Старый 16.06.2016, 12:39
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 7  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Enter_frame тут нужен, по событию complete флешка находится еще в первом кадре, нужно дождаться ее перехода на второй.

Старый 16.06.2016, 13:08
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Обычно (если уж мы уходим от ENTER_FRAME) в конструкторе мы делаем stop(), а по COMPLETE — nextFrame().
__________________
Поймай яблоко 2!

Старый 16.06.2016, 13:23
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 9  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
ну, в примере видимо расчет на то, что фрейм может быть не один)

Старый 16.06.2016, 13:40
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
В классе-загрузчике обычно (всегда?) два фрейма. Сколько их в основном классе приложения не имеет значения.
__________________
Поймай яблоко 2!

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

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

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


 


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


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