Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   [mxmlc][Flex SDK] Добавить стандартный прелоадер (http://www.flasher.ru/forum/showthread.php?t=145339)

xintrea 05.10.2010 13:10

[mxmlc][Flex SDK] Добавить стандартный прелоадер
 
Здравствуйте!


Есть у меня AS3 приложение с главным файлом Main.as, которое я компилирую с помощью команды "mxmlc Main.as". Мне нужно добавить хоть какой-нибудь прелоадер.

Вот здесь написано, что вроде как достаточно сделать mxml файл, в котором нужно прописать:

Код AS3:

<s:Application ... preloader="mx.preloaders.DownloadProgressBar">

и у приложения появится какой-то стандартный прелоадер.

В том же каталоге, где лежит файл Main.as, я сделал файл application.mxml со следующим содержимым:

Код AS3:

<?xml version="1.0"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    xmlns:s="library://ns.adobe.com/flex/spark"
    preloader="mx.preloaders.DownloadProgressBar"
    usePreloader="true">
    <mx:Script source="Main.as"/>
</s:Application>

Но при компиляции командой "mxmlc application.mxml" выдается ошибка:

Цитата:

Ошибка: Не удалось использовать <mx:Script> для реализации компонента.
<mx:Script source="Main.as"/>
Как ее побороть, так и не понял. :umnik2:

Вот здесь говорят, что нужно подключать пространство xmlns:mx="library://ns.adobe.com/flex/mx" - так оно у меня подключено.

Еще обнаружил, что если вместо Main.as указать несуществующий файл - будет такая же ошибка.

Что я делаю неправильно? Как простейшим образом добавить к AS3 приложению хоть какой-нибудь прелоадер?

i.o. 05.10.2010 13:34

FlashDevelop не пробовали? Там есть стандартный проект "AS3 Project with Preloader".
За вами останется только графика.

Bgg 05.10.2010 13:44

Цитата:

Сообщение от i.o. (Сообщение 940924)
FlashDevelop не пробовали? Там есть стандартный проект "AS3 Project with Preloader".
За вами останется только графика.

Linux гораздо интереснее и занятнее.

xintrea 05.10.2010 14:26

> Linux гораздо интереснее и занятнее.

То есть, специалитов тут нет, и по вопросу ответить никто не может?

Bgg 05.10.2010 14:41

Цитата:

Сообщение от xintrea (Сообщение 940940)
> Linux гораздо интереснее и занятнее.

То есть, специалитов тут нет, и по вопросу ответить никто не может?

Не надо быть специализдтом, чтобы написать прелоадер.
Код 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;
                        if (parent == stage) stage.addChildAt(new mainClass() as DisplayObject, 0);
                        else addChildAt(new mainClass() as DisplayObject, 0);
                }
 
        }
 
}

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


xintrea 05.10.2010 15:24

> Не надо быть специализдтом, чтобы написать прелоадер.

Этот прелоадер ничего не показывает.

По вопросу стандартного прелоадера добился следующего. Код application.mxml сделал таким:

Код AS3:

<?xml version="1.0"?> 
<mx:Application
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    preloader="mx.preloaders.DownloadProgressBar"
    usePreloader="true">
    <fx:Script source="Main.as"/>
</mx:Application>

При компиляции *.as файл теперь подхватывается. Но вылазит такая ошибка:

Цитата:

Main.as(7): Ошибка: Пакеты не могут быть вложенными.
import flash.events.MouseEvent;
Совершенно непонятно, почему компиляция командой "mxmlc Main.as" идет, а если компилировать через подключение к *.mxml, вылазит такая ошибка. Начало файла Main.as:

Код AS3:

package {
 
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.display.DisplayObject;
    import flash.display.SimpleButton;
    import flash.events.MouseEvent;
    import flash.events.Event;
 
    import PushButton;
 
    public class Main extends Sprite
    {
...


Hidest 05.10.2010 16:08

Код AS3:

// TODO show loader

Как бы намекает, что сюда надо самому написать появление графики прелоадера на сцене,

а вот это
Код AS3:

// TODO update loader

самому написать изменение состояния этого самого прелоадера ( изменение циферок + прогресс бар).

alatar 05.10.2010 17:17

Цитата:

По вопросу стандартного прелоадера добился следующего.
Нет такого понятия как "стандартный прелоадер", как и самих стандартов. То, что вы пытаетесь использовать работает в флекс проектах и именно о таком случае говорится в хелпе по вашей ссылке.

Код AS3:

<fx:Script source="Main.as"/>

В source тега Script нельзя вставить код класса, о чем завуалированно говорится в тексте ошибки. По-сути вы пытаетесь дописать код класса Main в класс Application.

P.S. Не морочьте себе голову и воспользуйтесь кодом, который привел Bgg.

Как-то так будет работать (это только направление куда копать, код не проверял):
Код AS3:

<?xml version="1.0"?> 
<mx:Application
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    preloader="mx.preloaders.DownloadProgressBar"
    usePreloader="true">
    <mx:UIComponent width="100%" height="100%">
        <Main/>
    </mx:UIComponent>
</mx:Application>

Но тут возникает вопрос, а стоит ли тащить за собой половину флек-фреймворка ради прелоадера.

xintrea 05.10.2010 20:39

Всё, всем спасибо. Сделал простейший прелоадер на базе кода что дал Bgg.

Результирующая флешка: http://www.multikov.net/animation.ph...000&data4=1072.

За сим, забываю про Flex/Flash как про страшный сон.

arkadattx 05.10.2010 20:53

Вот, обсуждалось.
Цитата:

Сообщение от Bgg (Сообщение 940926)
Linux гораздо интереснее и занятнее.

А при чем тут Linux? Или я юмора не понял?


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

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