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

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

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Smile И снова прелоадер:)

Собственно есть прелоадер флешки.

Код AS3:
import caurina.transitions.Tweener;
	import classes.utils.myinterface.Panel;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.MouseEvent;
	import flash.events.ProgressEvent;
	import flash.text.TextField;
	import flash.utils.getDefinitionByName;
	import lib.FluidLayout.FluidObject;
 
	/**
	 * ...
	 * @author Dukobpa3
	 */
	public class Preloader extends Sprite 
	{
		private var preloader:PreloaderScreen = new PreloaderScreen();
		private var pourc:Number = 0;
 
		private var knopka:Sprite;
 
		private var completeF:Boolean = false;/*проверка на загружено/не загружено. тут гломурная система типа если загрузилось быстрее чем надо - то прелоадер все-равно доигрывает до конца*/
 
		public function Preloader() {
			if (stage) {
				stage.scaleMode = StageScaleMode.NO_SCALE//SHOW_ALL;
				stage.align = StageAlign.TOP_LEFT//TOP;
			}
			addEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
			loaderInfo.addEventListener(Event.COMPLETE, complete);
 
			this.addChild(preloader);
 
			preloader.door.stop(); // это собственно сама анимация, которая есть частью прелоадера
 
		}
 
		private function ioError(e:IOErrorEvent):void {
			trace(e.text);
		}
 
		private function progress(e:ProgressEvent):void {
			pourc = Math.ceil((e.bytesLoaded/e.bytesTotal)*100); /*тут считается "правильное" количество кадров которое нужно отыграть к этому времени*/
		}
 
		private function checkFrame(e:Event):void {
			if (preloader.door.currentFrame < preloader.door.totalFrames) {
				if (preloader.door.currentFrame + 1 <= int(pourc)) preloader.door.nextFrame();
			}
 
			if (completeF && preloader.door.currentFrame == preloader.door.totalFrames) { 
				preloader.removeChild(preloader.door);
				removeEventListener(Event.ENTER_FRAME, checkFrame);
				knopkaF();
			}			
		}
 
		private function complete(e:Event):void {
/*собственно ставим чекер "загружено" по комплиту*/			
			completeF = true;			
		}
 
		private function startup():void {
/*удаляем все листенеры, С твином убираем прелоадер и показываем Main*/			
			var mainClass:Class = getDefinitionByName("Main") as Class;
 
			loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);
			loaderInfo.removeEventListener(Event.COMPLETE, complete);
 
			addChildAt(new mainClass() as Sprite, 0);
 
			Tweener.addTween(preloader.frame,{scaleX:5,scaleY:5,time:1.5,transition:"easeInCubic",onComplete:removeFrame});
			Tweener.addTween(preloader.title,{scaleX:5,scaleY:5,time:1.5,transition:"easeInCubic"});
			Tweener.addTween(preloader.beerLogo,{scaleX:5,scaleY:5,time:1.5,transition:"easeInCubic"});
			Tweener.addTween(preloader.black, { alpha:0, time:1.5, transition:"easeInCubic" } );
 
 
		}
 
		private function knopkaF(): void {
			var tf:TextField = new TextField();
			knopka = new Sprite();
			knopka.addEventListener(MouseEvent.CLICK, click);
 
/*Тут было многабукафф на тему создания самой кнопки, рисования на ней шейпа, а поверху нанесения текста, удалил чтоб код сократить*/			
 
			preloader.addChild(knopka);
		}
 
		private function click(e:MouseEvent): void {
			preloader.removeChild(knopka);
			startup();
		}
 
		private function removeFrame():void {
			preloader.removeChild(preloader.frame);
			preloader.removeChild(preloader.black);
		}
	}
 
}
ну собственно вот так. Только есть проблема. У меня на машине во всех браузерах всё ок, и при загрузке локально, и если по ссылке открываю, а у клиента только ФФ показывает нормально. В остальных браузерах затык происходит или сразу же после загрузки - прелоадер не играет анимацию, а залипает на первом кадре. Или же после того как нажмет на кнопку ниче не происходит.

Добавлено через 24 минуты
Да, компилится под десятый плеер

Добавлено через 15 часов 25 минут
Никто ничего не скажет по этому поводу?

Добавлено через 21 час 10 минут
Сам спросил, сам ответил))) Лол))

Короче, может кому пригодится. Проблему решил и крылась она в следующем:

Прелоадер сделан посредством [Frame(factoryClass="Preloader")] перед объявлением главного класса Main.

эта команда делает следующее: Добавляет в месте инструкции дополнительный фрейм. Т.е. по буквам: основным является у нас мейн, и он компилится как основной, но перед ним вставляется дополнительный кадр. Собственно прелоадер.

Получается что наша флешка становится двухкадровой. В первом мейн, в нулевом прелоадер.

Так вот собственно от "хз что делать я в панике" я декомпилил свою флешку и поглядел как она себя ведет, оказалось что она мигает с одного кадра на другой в процессе работы. И в процессе проигрывания прелоадера в том числе.

А так как наш Main находится на втором кадре, то если флешка была в процессе обращения к нему на первом - соответственно Main не находился.

В итоге я становил проигрывание в прелоадере и сделал некстФрейм() когда прелоадер отыграл.

Всем спасибо, все свободны)))) Тема закрыта))

(кстати, делая [Frame(factoryClass="Preloader")] - надо помнить что прелоадер в итоге получается главным классом, чего бы там не указывали в инструкциях компилятору. А к нему уже добавляются чилды анимации прелоадера как такового и потом уже в виде чилда же Main. Следовательно Preloader должен полюбому наследовать MovieClip но не Sprite, так как он содержит эти самые два кадра с прелоадером на первом и мейном на втором)


Последний раз редактировалось Dukobpa3; 22.11.2010 в 23:28.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
preloader
Опции темы
Опции просмотра

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

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


 


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


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