Форум 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=136011)

Александр 07.02.2010 16:19

прелоудер на флеш девелоп, опаздыват (
 
Всем привет!
Юзаю стандартный прелоудер,который генерит флешдевелоп,

он начинает отображаться только с 70 процентов

оно и понятно (
но тут же нельзя медию положить на 3 кадр? или можно?
как советают в ксэцоы?
или как это сделать?


Код AS3:

package 
{
        import flash.display.Bitmap;
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.ProgressEvent;
        import flash.text.TextField;
        import flash.utils.getDefinitionByName;
        import game.Media;
        import game.Define;
        import orlax.core.Utils;
        import flash.text.TextFieldAutoSize;
        import flash.display.BlendMode;
 
        public class Preloader extends MovieClip
        {
                [Embed(source='../Build/lib/Loader.png')]
                static public var loaderIMG:Class;
 
                protected var loaderSPR:Sprite = null;
 
                public function Preloader()
                {
                        addEventListener(Event.ENTER_FRAME, checkFrame);                               
                        // show loader                               
                        this.graphics.beginFill(0xa0aaf7);
                        this.graphics.drawRect(0,0, Define.SCREEN_WIDTH, Define.SCREEN_HEIGHT);                       
                        this.graphics.endFill();                               
                        var spr:Sprite = new Sprite();
                        addChild(spr);
                        loaderSPR = spr;
                        spr.graphics.beginFill(0xffffff);
                        spr.graphics.drawRect(-1, -1, 253, 16);                       
                        spr.graphics.endFill();
                        spr.x = Define.SCREEN_WIDTH/2 - spr.width / 2;
                        spr.y = Define.SCREEN_HEIGHT/2 - spr.height / 2;                       
                        var img:Bitmap = new loaderIMG();
                        addChild(img);
                        img.x = Define.SCREEN_WIDTH/2 - img.width / 2;
                        img.y = Define.SCREEN_HEIGHT/2 - img.height / 2;                       
                        drawProgress(0);
                }
 
                private function drawProgress(prc:Number):void               
                {
                        loaderSPR.graphics.beginFill(0x374375);
                        loaderSPR.graphics.drawRect(-1, -1, 253 * prc, 16);                       
                        loaderSPR.graphics.endFill();                               
                }
 
                public  function isUrl(urls:Array):Boolean
                {               
                        var domain:String = getUrl();
                        for (var i:int = 0; i < urls.length; i++)                       
                        {
                                if (domain == urls[i])        return true;                               
                        }
                        return false;
                }
                public  function getUrl():String
                {
                        var url:String = stage.loaderInfo.loaderURL;
                        var urlStart:Number = url.indexOf("://") + 3;                       
                        var urlEnd:Number = url.indexOf("/", urlStart);
                        var domain:String = url.substring(urlStart, urlEnd);
                        var LastDot:Number = domain.lastIndexOf(".") - 1;                       
                        var domEnd:Number = domain.lastIndexOf(".", LastDot) + 1;                       
                        domain = domain.substring(domEnd, domain.length);
                        return domain;
                }
 
                private function checkFrame(e:Event):void
                {
                        // update loader                         
                        if (currentFrame == totalFrames)
                        {
                                removeEventListener(Event.ENTER_FRAME, checkFrame);                               
                                startup();
                        }
                        else
                        {
                                drawProgress((loaderInfo.bytesLoaded * 100 / loaderInfo.bytesTotal)/100);       
                        }
                }       
 
                private function startup():void
                {
                        Media.load();               
                        stop();               
                        if (isUrl(["","flashgamelicense.com"]))
                        {
                                var mainClass:Class = getDefinitionByName("Main") as Class;
                                addChild(new mainClass() as DisplayObject);
                        }
                        else
                        {
                                var txt:TextField = new TextField();
                                txt.text = "[" + getUrl() + "]\nError: this URL not found";                               
                                txt.setTextFormat(Media.textFormatCenter);                       
                                txt.selectable = false;
                                txt.autoSize = TextFieldAutoSize.CENTER;
                                addChild(txt);       
                                txt.scaleX = txt.scaleY = 2;
                                txt.x = Define.SCREEN_WIDTH / 2 - txt.width / 2;                                       
                                txt.y = Define.SCREEN_HEIGHT / 2 - txt.height / 2;                       
                                //drawProgress(0.5);
                                txt.blendMode = BlendMode.INVERT;
                        }
                }
 
        }
 
}


Wolsh 07.02.2010 17:08

Цитата:

оно и понятно (
Совершенно не понятно. Прелоадер ФД прекрасно работает, использовал уже много раз. Проверьте Ваши импорты - если в Прелоадере загружается весь контент флэшки, то конечно Вы получите 70% на старте. По данному коду трудно сказать, в частности что такое Media.load() ? Может, у Вас в "оставшейся" флэшке и нет больше ничего, а весь контент подгружается с сервера? Прелоадер ведь о нем не знает.. Вобщем, расскажите чуть больше о структуре, или исправьте сами, если заметили где происходит импорт всего "остального" в прелоадер. Весь контент должен появляться в классе Main, который не импортится в Прелоадер.(!)

Александр 07.02.2010 18:18

oO ясненько!

структура такая)

есть класс Media
в нем статические классы ембеды

к примеру так

Код AS3:

class Media
{
public static var images:Array=[];
[embed .....'jpg'..]
protected static img1:Class;
}


а в Лоад
просто создается по одному экземляру
типо
Код AS3:

image.push([name,new img1()]);


Wolsh 07.02.2010 19:46

Ну вот и ответ. То есть все это добро у Вас грузится в первый кадр Прелоадера. Отсюда и 70% на старте.

Александр 07.02.2010 20:01

угу я таки в первом посте и написал!

а как во флеш девелопе грузить не на первый? мне не ясно! как быть?

Добавлено через 1 минуту
может
типо в прелоудере где чек фрейм?
написать если кадр==2?
но мне не ясно сколько в прелоудере кадров, и откуда они беруться (

Wolsh 07.02.2010 21:55

Не надо импортить в него классы, не участвующие в самом прелоадере. Например - Media. Я же написал - весь контент должен импортироваться в класс Мейн. Прелоадер вообще не должен знать, что они существуют, эти классы, картинки, звуки и все прочее, чего он сам не показывает. В прелоадере должно быть ТОЛЬКО то, что визуализирует сам прелоадер. Все остальное запускается, когда на сцену помещается Мейн. Знать о них должен только Мейн, не Прелоадер. Вы должны рассматривать их как две разных флэшки:
Сначала загружаются все элементы, необходимые для показа первого кадра - Прелоадера, и он отображается. Проигрывающая головка таймлайна переходит на второй кадр - checkFrame определяет что этот кадр - последний. Выполняется
Код:

addChild(new mainClass() as DisplayObject);
плеер НАХОДИТ класс Мейн и начинает загружать все, что "упоминается" в нем - вот здесь и начинается загрузка основного контента, при этом Прелоадер уже работает и показывает эту загрузку (точнее генерит события прогресса загрузки, а уж что там показывается и как - определяете Вы в обработчиках) - и продолжается до тех пор, пока не загрузится все необходимое для показа "второго кадра" - то есть, вся флэшка целиком. Когда все загрузится, мувиклип Прелоадера покажет этот кадр. А в этом кадре - собственно все Ваше приложение. Вот, грубо, схема работы этого прелоадера. Если еще грубее - первый кадр это класс Прелоадер, а второй кадр - класс Мейн. Всю тяжелую артиллерию Вы должны инициировать только в Мейн, а в Прелоадере - только то что нужно Прелоадеру.

Александр 07.02.2010 23:37

Спасибо огромное, сейчай попробую)


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

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