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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.09.2012, 23:35
says вне форума Посмотреть профиль Найти все сообщения от says
  № 1  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
По умолчанию Прелоадер и основной класс

Доброго времени суток.
Хотел посоветоваться,по поводу прелоадера и основного класса собственного ''приложения'' на as 3.0

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

Подумал,хочу!) Но не очень понимаю:
1)Как вписать прилоадер,таким образом что бы он запускался до "приложения" (интересует сама связь с основным классом)
2)хоть какие то пояснения к строкам к той программе которую я "нагло скатал" (прелоадер)

собственно код первый(основной класс):

Код AS3:
package {
	import flash.events.MouseEvent;
	import flash.display.MovieClip;
 
	public class Vtest extends MovieClip { //указываю публичный класс
        private var btn:Btn;//переменная типа Btn
	 //var pr:Vpreload=new Vpreload();
	  	public function Vtest(){ // создаю конструктор
 
				btn = new Btn(); // переменная из класса кнопки,созданной графически
				addChild(btn);//добавляю нашу кнопку
				btn.x=100;//координаты х
				btn.y=100;//координаты y
				btn.addEventListener(MouseEvent.CLICK,func); //завожу слушатель событий
				stop();//останавливаю на первом кадре выполнение программы
	 		 }
	  		function func(e:MouseEvent):void{  //описываю функцию
		 			removeChild(btn); //при нажатии на btn удаляем чайлд
			 		gotoAndStop(2); // прыгаем на второй кадр с остановкой
				}
	}
}

вот прелоадер

Код AS3:
package {
	import flash.display.Sprite;
  import flash.events.Event;
	import flash.display.MovieClip;
	internal class Vpreload extends MovieClip{
		private var w:uint = 200;//ширина преоладера
		private var h:uint = 10;//высота преоладера
		private var colorFon :uint=0xcccccc;//цвет фона прелоадера
		private var color:uint = 0x204000;//цвет полосы прелоадера
		private var preloaderContainer:Sprite = new Sprite();//переменная для построения контейнера прелоадера
		private var band:Sprite = new Sprite();//см индикатор
		private var btn1:Vtest = new Vtest();//экземпляр класса Vtest в переменную
		//private var btn1:new btn();
		public function Vreload(){
			 //stop();
			//рисуем прелоадер контэйнер
			preloaderContainer.graphics.lineStyle(1,color,1);
			preloaderContainer.graphics.beginFill(colorFon,1);
			preloaderContainer.graphics.drawRect(0,0,w,h);
			preloaderContainer.graphics.endFill();
			addChild(preloaderContainer);
			//переносим в центр
			preloaderContainer.x=(stage.stageWidth - w)/2;
			preloaderContainer.y=(stage.stageWidth - h)/2;
			//делаем индикатор
			band.graphics.beginFill(color,1);
			band.graphics.drawRect(0,0,w,h);
			preloaderContainer.graphics.endFill();
			preloaderContainer.addChild(band);
			//проверяем статус загрузки
			addEventListener(Event.ENTER_FRAME, onEnterFrames);
				  function onEnterFrames(event:Event) {
				  var bLoaded:uint = loaderInfo.bytesLoaded;
				  var bTotal:uint = loaderInfo.bytesTotal;
				  band.scaleX = bLoaded / bTotal;
				  //если флеш-ролик загружен полностью, то удаляем сам прелоадер и переходим на следующий кадр 
				   if (bLoaded >= bTotal) {
					  removeChild(preloaderContainer);
					  removeEventListener(Event.ENTER_FRAME, onEnterFrames);
					  nextFrame(); // или gotoAndPlay(номер_кадра);
						//addChild(btn1);
 
				  }
					addChild(btn1);
			  }
		}
	}
}

Я понимаю,первые сообщения,мол читай книжки,статьи,документацию,но узнать от продвинутых людей в этом деле ,интереснее и вы подскажите новичку ответ без лишней воды.


Последний раз редактировалось says; 19.09.2012 в 23:39. Причина: не закончил мысль
Старый 20.09.2012, 00:24
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 2  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Есть два варианта прелоадера - внешний и "внутренний".

Внешний прелоадер просто грузит указаную флешку и размещает ее у себя на сцене. Для коректной работы целевая флешка не должна сразу начинать работу, а только тогда, когда ее положат на сцену (слушайте событие Event.ADDED_TO_STAGE).

"Внутренний" прелоадер - это просто первый кадр флешки. Так как плеер начинает проигрывать флешку сразу, как только загрузит первый кадр, то можна в этом месте вызвать метод stop() и не продолжать проигрывание, пока весь свф-файл не загрузится. А пока идет загрузка можна слушать событие Progressevent.PROGRESS и отображать процес загрузки. Для того, чтобы избежать столкновения с Flash IDE и писать чистый код можна использовать метатег [Frame], который разрешыт вам "подвинуть" главный класс вашего приложения на втрорй кадр, а на первом вставить класс прелоадера.
Если вы используете FlashDevelope, то там есть шаблон AS3 Project With Preloader. Вот что он генерирует:

Main.as
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
 
	[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.as
Код AS3:
package {
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.utils.getDefinitionByName;
 
	public class Preloader extends MovieClip {
 
		public function Preloader() {
			if (stage) {
				stage.scaleMode = StageScaleMode.NO_SCALE;
				stage.align = StageAlign.TOP_LEFT;
			}
			addEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
 
			// TODO show loader
		}
 
		private function ioError(e:IOErrorEvent):void {
			trace(e.text);
		}
 
		private function progress(e:ProgressEvent):void {
			// TODO update loader
		}
 
		private function checkFrame(e:Event):void {
			if (currentFrame == totalFrames) {
				stop();
				loadingFinished();
			}
		}
 
		private function loadingFinished():void {
			removeEventListener(Event.ENTER_FRAME, checkFrame);
			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);
		}
 
	}
 
}
Правите класс Preloader под себя и... ВУАЛЯ!

Старый 20.09.2012, 15:20
dvrbear вне форума Посмотреть профиль Отправить личное сообщение для dvrbear Найти все сообщения от dvrbear
  № 3  
Ответить с цитированием
dvrbear
[+1.3 06.03.12]
 
Аватар для dvrbear

Регистрация: Oct 2003
Адрес: Moldova, Kishinev
Сообщений: 133
Отправить сообщение для dvrbear с помощью ICQ Отправить сообщение для dvrbear с помощью Skype™
какраз на днях задавался вопросом как сделать с применением [Frame(factoryClass="Preloader")]
прелодер с графикой

удалось подключить отдельную библиотеку swc с графикой для прелодера

вот пример:
Вложения
Тип файла: zip withPrel.zip (2.62 Мб, 56 просмотров)
__________________
http://apa-noua.com/portfolio

Старый 20.09.2012, 21:00
says вне форума Посмотреть профиль Найти все сообщения от says
  № 4  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
Интересно,но не могли бы вы более подробно описать вещи про котрые я спрашиваю)
Я новичок,для меня даже 2 разных swf сложно)))

Старый 20.09.2012, 21:10
dvrbear вне форума Посмотреть профиль Отправить личное сообщение для dvrbear Найти все сообщения от dvrbear
  № 5  
Ответить с цитированием
dvrbear
[+1.3 06.03.12]
 
Аватар для dvrbear

Регистрация: Oct 2003
Адрес: Moldova, Kishinev
Сообщений: 133
Отправить сообщение для dvrbear с помощью ICQ Отправить сообщение для dvrbear с помощью Skype™
ну во первых установите flash develop
и попробуйте создать AS3 Project with Preloader

в файле preloader.as вы найдете места для формирования собственного визуального прелодера

куда проще пока вариантов нет так как программа все напишет и расставит по полочкам за вас

удачи
__________________
http://apa-noua.com/portfolio

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

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

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


 


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


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