Просмотр полной версии : [mxmlc][Flex SDK] Добавить стандартный прелоадер
Здравствуйте!
Есть у меня AS3 приложение с главным файлом Main.as, которое я компилирую с помощью команды "mxmlc Main.as". Мне нужно добавить хоть какой-нибудь прелоадер.
Вот здесь (http://help.adobe.com/ru_RU/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7e3c.html) написано, что вроде как достаточно сделать mxml файл, в котором нужно прописать:
<s:Application ... preloader="mx.preloaders.DownloadProgressBar">
и у приложения появится какой-то стандартный прелоадер.
В том же каталоге, где лежит файл Main.as, я сделал файл application.mxml со следующим содержимым:
<?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:
Вот здесь (http://otvety.google.ru/otvety/thread?tid=0d00b0e05d9c4f68&pli=1) говорят, что нужно подключать пространство xmlns:mx="library://ns.adobe.com/flex/mx" - так оно у меня подключено.
Еще обнаружил, что если вместо Main.as указать несуществующий файл - будет такая же ошибка.
Что я делаю неправильно? Как простейшим образом добавить к AS3 приложению хоть какой-нибудь прелоадер?
FlashDevelop не пробовали? Там есть стандартный проект "AS3 Project with Preloader".
За вами останется только графика.
FlashDevelop не пробовали? Там есть стандартный проект "AS3 Project with Preloader".
За вами останется только графика.
Linux гораздо интереснее и занятнее.
> Linux гораздо интереснее и занятнее.
То есть, специалитов тут нет, и по вопросу ответить никто не может?
> Linux гораздо интереснее и занятнее.
То есть, специалитов тут нет, и по вопросу ответить никто не может?
Не надо быть специализдтом, чтобы написать прелоадер.
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);
}
}
}
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
}
}
}
> Не надо быть специализдтом, чтобы написать прелоадер.
Этот прелоадер ничего не показывает.
По вопросу стандартного прелоадера добился следующего. Код application.mxml сделал таким:
<?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:
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
{
...
// TODO show loader
Как бы намекает, что сюда надо самому написать появление графики прелоадера на сцене,
а вот это // TODO update loader самому написать изменение состояния этого самого прелоадера ( изменение циферок + прогресс бар).
По вопросу стандартного прелоадера добился следующего.
Нет такого понятия как "стандартный прелоадер", как и самих стандартов. То, что вы пытаетесь использовать работает в флекс проектах и именно о таком случае говорится в хелпе по вашей ссылке.
<fx:Script source="Main.as"/>
В source тега Script нельзя вставить код класса, о чем завуалированно говорится в тексте ошибки. По-сути вы пытаетесь дописать код класса Main в класс Application.
P.S. Не морочьте себе голову и воспользуйтесь кодом, который привел Bgg.
Как-то так будет работать (это только направление куда копать, код не проверял):
<?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>
Но тут возникает вопрос, а стоит ли тащить за собой половину флек-фреймворка ради прелоадера.
Всё, всем спасибо. Сделал простейший прелоадер на базе кода что дал Bgg.
Результирующая флешка: http://www.multikov.net/animation.php?data1=550&data2=384&data3=000000&data4=1072.
За сим, забываю про Flex/Flash как про страшный сон.
arkadattx
05.10.2010, 20:53
Вот (http://www.flasher.ru/forum/blog.php?b=243), обсуждалось.
Linux гораздо интереснее и занятнее.
А при чем тут Linux? Или я юмора не понял?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.