![]() |
|
||||||||||
|
|||||
|
Banned
[+1 13.12.12]
[+6 15.11.12] [+5 14.12.12] Регистрация: Sep 2012
Сообщений: 91
|
Доброго времени суток.
Хотел посоветоваться,по поводу прелоадера и основного класса собственного ''приложения'' на as 3.0 Имею основной класс который связан с кнокой в графике,недавно нашел хорошую статью про т.н. прелоадер. Подумал,хочу!) Но не очень понимаю: 1)Как вписать прилоадер,таким образом что бы он запускался до "приложения" (интересует сама связь с основным классом) 2)хоть какие то пояснения к строкам к той программе которую я "нагло скатал" (прелоадер) собственно код первый(основной класс): 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); // прыгаем на второй кадр с остановкой } } } вот прелоадер 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. Причина: не закончил мысль |
|
|||||
|
Есть два варианта прелоадера - внешний и "внутренний".
Внешний прелоадер просто грузит указаную флешку и размещает ее у себя на сцене. Для коректной работы целевая флешка не должна сразу начинать работу, а только тогда, когда ее положат на сцену (слушайте событие Event.ADDED_TO_STAGE). "Внутренний" прелоадер - это просто первый кадр флешки. Так как плеер начинает проигрывать флешку сразу, как только загрузит первый кадр, то можна в этом месте вызвать метод stop() и не продолжать проигрывание, пока весь свф-файл не загрузится. А пока идет загрузка можна слушать событие Progressevent.PROGRESS и отображать процес загрузки. Для того, чтобы избежать столкновения с Flash IDE и писать чистый код можна использовать метатег [Frame], который разрешыт вам "подвинуть" главный класс вашего приложения на втрорй кадр, а на первом вставить класс прелоадера. Если вы используете FlashDevelope, то там есть шаблон AS3 Project With Preloader. Вот что он генерирует: Main.as 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 } } } 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); } } } |
|
|||||
|
[+1.3 06.03.12]
|
какраз на днях задавался вопросом как сделать с применением [Frame(factoryClass="Preloader")]
прелодер с графикой удалось подключить отдельную библиотеку swc с графикой для прелодера вот пример:
__________________
http://apa-noua.com/portfolio |
|
|||||
|
Banned
[+1 13.12.12]
[+6 15.11.12] [+5 14.12.12] Регистрация: Sep 2012
Сообщений: 91
|
Интересно,но не могли бы вы более подробно описать вещи про котрые я спрашиваю)
Я новичок,для меня даже 2 разных swf сложно))) |
|
|||||
|
[+1.3 06.03.12]
|
ну во первых установите flash develop
и попробуйте создать AS3 Project with Preloader в файле preloader.as вы найдете места для формирования собственного визуального прелодера куда проще пока вариантов нет так как программа все напишет и расставит по полочкам за вас удачи
__________________
http://apa-noua.com/portfolio |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|