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

gadzhimari 07.10.2012 23:06

Не отображается линия загрузки внутреннего прелоадера
 
Вложений: 1
Пытаюсь сделать внутренний прелоадер чисто средствами AS3 без Flash IDE. Вложил изображение размером 14 мб так вот сама линия прогресса не отображается, а есть лишь белый экран. Тестировал прелоадер залив на Dropbox.

Помимо этого возникает пара проблем:
1. Когда используешь мета тег [Frame], не работает тег [SWF], т.е. не изменяется ширина и высота экраны, цвет бэкграунда.

2. Когда создаешь проект, то приходится класс прелоадера переносить в отдельный пакет, иначе выходит ошибки при компиляции "Error 1065: Переменная Main не определена." Но в том же проекте, после создания отдельного пакета для класса прелоадера, и повторном удалении пакета и перемещением его рядом с основным классом приложения, ошибка перестает выходить. Незнаю наверное какой-то баг.

Конфигурация:
IDE: FlashBuilder 4.7
Версия Flash Player Debug: 11.4.402.265
SDK: 4.6

Собственно вот код.
Код AS3:

package example
{
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * Основной класс приложения
        */

        [SWF(width="640", height="480", backgroundColor="#FF0000", frameRate="60")]
        [Frame(factoryClass="ExamplePreloader")]
        public class Main extends Sprite
        {
                [Embed(source="../assets/Andromeda.jpg")]
                private var Asset:Class;
 
                public function Main()
                {
                        if (stage == null)
                        {
                                addEventListener(Event.ADDED_TO_STAGE, initialize);
                        }
                        else
                        {
                                initialize();
                        }
                }
 
                private function initialize(event:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, initialize);
                        trace("Preloader::initialize()");
 
                        var asset:Bitmap = new Asset();
                        addChild(asset);
                }       
        }
}

Код AS3:

package example
{       
 
        public class ExamplePreloader extends Preloader
        {
                public function ExamplePreloader()
                {
                        className = "Main";
                        super();
                }
 
                override public function update(aPercent:Number):void
                {
                        super.update(aPercent);
                        trace("Loading:", aPercent * 100);
                }
 
                override public function completed():void
                {
                        super.completed();
                        trace("Loading is completed!");
                }
        }
}

Код AS3:

package example
{
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.display.Shape;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.filters.BitmapFilterQuality;
        import flash.filters.GlowFilter;
        import flash.utils.getDefinitionByName;
 
        public class Preloader extends MovieClip
        {
                public var className:String;
 
                private var _topBar:Shape;
 
                public function Preloader()
                {                       
                        stop();
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage.align = StageAlign.TOP_LEFT;
                        addEventListener(Event.ENTER_FRAME, enterFrameHandler);
 
                        _topBar = new Shape();
                        _topBar.filters = [new GlowFilter(0xFFFFFF, .4, 13, 13, 2, BitmapFilterQuality.HIGH)];
                        addChild(_topBar);
                }
 
                protected function enterFrameHandler(event:Event):void
                {
                        if (framesLoaded == totalFrames)
                        {
                                completed();
                        }
                        else
                        {
                                update(root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal);
                        }
                }
 
                public function completed():void
                {
                        graphics.clear();
                        removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
                        nextFrame();
                        initialize();
                }
 
                public function update(aPercent:Number):void
                {
                        graphics.clear();
                        _topBar.graphics.beginFill(0xC2758B, 1);
                        _topBar.graphics.drawRect(0, stage.stageHeight / 2 - 10, stage.stageWidth * aPercent, 20);
                        _topBar.graphics.endFill();
                }
 
                protected function initialize():void
                {
                        var mainClass:Class = Class(getDefinitionByName(className));
                        if (mainClass)
                        {
                                var app:Object = new mainClass();
                                addChild(app as DisplayObject);
                        }
                }
        }
}

Писал также мета тег [SWF(width="640", height="480", backgroundColor="#FF0000", frameRate="60")] и в классах Preloader и ExamplePreloader не сработало.

Если поменять document class на Preloader или ExamplePreloader выходят ошибки:
"ArgumentError: Error #1507: Аргумент name не может быть "null".
at global/flash.utils::getDefinitionByName()
at example::Preloader/initialize()[/Users/gadzimari/Documents/Adobe Flash Builder 4.7/preloader/src/example/Preloader.as:61]
at example::Preloader/completed()[/Users/gadzimari/Documents/Adobe Flash Builder 4.7/preloader/src/example/Preloader.as:48]
at example::Preloader/enterFrameHandler()[/Users/gadzimari/Documents/Adobe Flash Builder 4.7/preloader/src/example/Preloader.as:35]"


Ещё такой вопрос почему при добавлении изображения тегом [Embed] копия картинки вместе с папкой, где она расположена, появляется в папке bin-debug?

Буду благодарен за помощь.

P.S. Просьба не отсылать на сторонние сайты для ознакомления с этой темой, т.к. до того как создавать тему я прочитал массу постов и блогов по этой теме, но ничего не помогло.

Wolsh 07.10.2012 23:20

gadzhimari, перезалейте исходники на форум (Изменить/Расширенный режим/Управление вложениями).

Цитата:

выходят ошибки:
"ArgumentError: Error #1507: Аргумент name не может быть "null".
at global/flash.utils::getDefinitionByName()
ну а чего Вы ждали, если
Код AS3:

public var className:String;
....
var mainClass:Class = Class(getDefinitionByName(className));


gadzhimari 07.10.2012 23:46

Цитата:

Сообщение от Wolsh (Сообщение 1098948)
gadzhimari, перезалейте исходники на форум (Изменить/Расширенный режим/Управление вложениями).

Перезалил исходники. Пришлось уменьшить размер изображения, т.к. более 10 Мб не заливается. А с Dropbox, выдает вместо ссылки какие звездочки.

Неужели ни у кого нет никаких догадок?


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

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