Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Внутренний прелоадер! (http://www.flasher.ru/forum/showthread.php?t=160678)

Universe 15.07.2011 22:51

Внутренний прелоадер!
 
Добрый вечер!
Обычно делаю всю загрузку через внешний прилоадер и не борюс со всякого рода глюками, но вот попал на заказчика который из приципа хочет внутренний прилоадер аля AS2, типа так проще и удобнее будет потом работать. Насколько я понимаю первое что нужно сделать - это убрать экспорт классов в первый кадр(галочка в объекте и настройки Publish - экспортировать во второй кадр). Но как тлько я это делаю и пытаюсь на втором кадре создать объект из библиотеки - у меня вываливается ошибка 1180: Call to a possibly undefined method Pic.
т.е. он его перестаёт видеть, даже во втором кадре! Что я делаю не правильно?

КорДум 15.07.2011 22:52

Посмотрите, как реализован прелоадер при создании проекта с прелоадером в FD.

Добавлено через 1 минуту
Код 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
                }
        }
}

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


Universe 15.07.2011 23:35

т.е. здесь лоадер выступает просто отдельным классом или он является внешней swf'кой?

КорДум 16.07.2011 00:16

Отдельный класс, который внедряется с помощью метатега
Код AS3:

[Frame(factoryClass="Preloader")]


Universe 16.07.2011 00:36

хм...интересно, впервые сталкиваюсь с подобной конструкцией:)

andrew911 16.07.2011 01:12

http://www.flasher.ru/forum/blog.php?b=315

КорДум 17.07.2011 17:13

http://www.flasher.ru/forum/showthread.php?t=115191

Universe 17.07.2011 20:18

спасибо, КорДум, сейчас ознакомлюсь

BlackMetal 26.07.2011 22:41

Объясните как пользоваться этим ПРЕЛОАДЕРОМ.
У меня проект, в планах 2 кадра в 1 прелоадер во 2 все остальное.

Я так понял, содаем отдельный класс PRELOADER + свой основной, но чего то я не понимаю куда втыкать пересчет % загрузки, и вообще скольки кадровый это прелоадер? я не вижу что он стопорит на втором фрейме или где то..

// TODO show loader
// TODO update loader
// TODO hide loader

немного не понимаю назначение этих точек..

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

КорДум 26.07.2011 22:44

Здесь кадры вообще не нужны. Все делают метатеги.
Код AS3:

// TODO show loader
// TODO update loader
// TODO hide loader

TODO - это напоминалки, что нужно сделать:
показать прелоадер
перерисовывать прелоадер в прогрессе загрузки
скрыть прелоадер, зачистить слушатели и т.п.

Цитата:

но чего то я не понимаю куда втыкать пересчет % загрузки
Под второй TODO.


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

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