Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Окно загрузки (http://www.flasher.ru/forum/showthread.php?t=209731)

Pegacy 14.12.2014 01:28

Окно загрузки
 
И снова всем привет. Я заметил что во многих клипах используется некое окно загрузки с прогресс баром, и когда загрузка завершена, активируется кнопка Play для воспроизведения клипа.

Хотелось бы в первую очередь узнать как оно работает и как реализовано? Ведь если swf не до конца скачался, каким образом он выполняет скрипт и даже что то рисует?

Неплохо бы найти какой нибудь туториал, желательно с исходником на эту тему. Спасибо.

samana 14.12.2014 12:01

Уроков в сети на эту тему (preloader as3) очень много. Например - http://flash-animated.com/sozdanie-p...-rolika-na-as3

delphic 18.12.2014 13:19

Цитата:

Сообщение от samana (Сообщение 1176288)
Уроков в сети на эту тему (preloader as3) очень много. Например - http://flash-animated.com/sozdanie-p...-rolika-na-as3

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

samana 18.12.2014 13:33

Это внутренний прелоадер. Как только загружен первый кадр флешки, она показывается и срабатывает код этого кадра или класса. Затем флешка просто сама себя проверяет - насколько она загрузилась.
Если у флешки всего один кадр, то такого внутреннего прелоадера ничего не выйдет.

delphic 18.12.2014 13:51

Цитата:

Сообщение от samana (Сообщение 1176497)
Это внутренний прелоадер. Как только загружен первый кадр флешки, она показывается и срабатывает код этого кадра или класса. Затем флешка просто сама себя проверяет - насколько она загрузилась.
Если у флешки всего один кадр, то такого внутреннего прелоадера ничего не выйдет.

смысл, 1)например я создал мувик 2)прикрутил его к классу прелодер 3)экспортирую этот мувик в первый кадр 4)кидаю прелодер на первый кадр, далее код в классе прелодера грузит игру и в конце переходит на второй кадр 5)на втором кадре меню игры которое запускает игру. А то что документ класс по умолчанию все равно вшит в первый кадр,ничего страшного я так понимаю, все равно флешка будет проверять насколько она загрузилась,я правильно понимаю логику? А совсем без кадров не пройдет я так понимаю,или хотябы на одном кадре, мне просто интересно. Например наверное можно сделать так отдельно класс прелодер котрый будет маин классом фла файла и этот фла файл будет грузить swf, а в этом swf будет фла файл с маин классом и без единого кадра....

samana 18.12.2014 13:54

Цитата:

Как его до маин класса вписывать,или не обязательно, если не обязательно так это схемотично выглядит хотя бы вообще меленький пример
Например если вы пишете не во Flash, в другой среде, где нет "явных" кадров, то можно вставить кадр перед маин классом. В том же Flashdevelop есть шаблон для прелоадера:
Preloader
Код 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);
                }
 
        }
 
}

Main
Код 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
                }
 
        }
 
}

Добавлено через 4 минуты
Да, вы правильно поняли голику по пунктам 1-5.

Цитата:

А то что документ класс по умолчанию все равно вшит в первый кадр,ничего страшного я так понимаю,
Документ класс - это не только первый кадр. Это все кадры главной линии времени (если они есть).

delphic 18.12.2014 14:45

ну да,про fd я слышал о такой штуке,но я делаю в cs6, спасибо за ответы, уже какое то понимание пришло, уж как то трудно для меня было это прелодер
у меня документ клас примерно такой
Код AS3:

package nazvanie
{
        import flash.display.*;
    import flash.ui.*;
        import flash.events.*;
 
        public class DocumentClass extends MovieClip
        {
      private var mainMenu:MainMenu;
          private var game:Game;
                public function DocumentClass()
                {       
                        mainMenu = new MainMenu();
                        mainMenu.x = 0;
                        mainMenu.y = 0;
                        this.addChild(mainMenu);
                        mainMenu.addEventListener("PLAY",playListener);
                }
      private function playListener(e:Event):void
          {
                game = new Game();
                game.x = 0;
                game.y = 0;
                stage.addChild(game);
          }
 
}

ну и например mainMenu это как раз меню,с которого можно запустить игру. Вот этот мувик например на второй кадр закину. Это нормальный подход? Повторюсь, прелодер в первом кадре грузит то что после второго кадра, а там меню по щелчку которого запускается игра, логично ? ну а документ класс получается тоже в первом кадре идет. вот получается два кадра, первый там лежит полоса загрузки, второй кадр с мувиком меню


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

samana 18.12.2014 15:10

Почему-то мне кажется, что так не совсем сработает, ведь конструктор DocumentClass всё равно вызовется с самого начала запуска флешки и покажет mainMenu (ведь оно у вас там прописано).

delphic 18.12.2014 15:40

Цитата:

Сообщение от samana (Сообщение 1176503)
Почему-то мне кажется, что так не совсем сработает, ведь конструктор DocumentClass всё равно вызовется с самого начала запуска флешки и покажет mainMenu (ведь оно у вас там прописано).

ну так как я выше написал, если я с документ класса уберу это все,будет докум класс пусть пустой,а на втором кадре мувик меню запуска игры к которому прикручен класс с кодом
Код AS3:

                mainMenu = new MainMenu();
                        mainMenu.x = 0;
                        mainMenu.y = 0;
                        this.addChild(mainMenu);
                        mainMenu.addEventListener("PLAY",playListener);
                }
      private function playListener(e:Event):void
          {
                game = new Game();
                game.x = 0;
                game.y = 0;
                stage.addChild(game);
          }

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

samana 18.12.2014 16:32

Тогда по-идее должно сработать! Но не могу сказать наверняка, так как не приходилось делать прелоадер во Flash IDE.


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

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