![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[++]
|
Всем привет! Впервые возникла необходимость сделать прелоадер одним файлом на AS3 - ибо нерадивые игровые порталы принимают игрушку одной swf-кой...((
Ситуация такая: Есть несколько fla-шек с кучей графики и экспортируемых классов, которые эту графику и используют. Как обычно - компилю их в swc, а swc-библиотеки подцепляются в проект во Flash Builder'е. Многие классы, написанные в билдере расширяют классы из swc. Например: Внешний прелоадер, естественно, работает на ура. Поковырялся чуток, убрал всем ресурсам галочку "Export in frame 1" - теперь билдер ругается кучей ошибок типа того: 1017: The definition of base class **** was not found 1046: Type was not found or was not a compile-time constant: ****. 1180: Call to a possibly undefined method ****. Подскажите по существу плиз)) Все найденные мной мануалы по "созданию прелоадера одним файлом" начинаются исключительно с танцев с бубном во FlashIDE и манипуляциях с кадрами... Реально ли сделать этот прелоадер в билдере?? Можно ли сделать какой то костыль в виде fla-шки, которая будет реализовывать всю эту историю с кадрами и при этом будет инстанциировать класс игры, созданный в билдере?)) Спасибо, если кто подскажет решение ) |
|
|||||
|
А так пробовали делать?
Document Class package { import flash.display.Sprite; [Frame(factoryClass='Preloader')] //Название класса прелоадера public class Main extends Sprite { public function Main() { //init } } } package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.events.ProgressEvent; import flash.utils.getDefinitionByName; public class Preloader extends MovieClip { public function Preloader() { //графика this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); } private function onProgress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); if (percent == 100) { this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); onLoaded(); } } private function onLoaded():void { nextFrame(); //на следующий кадр var App:Class = getDefinitionByName("Main") as Class; //Название Document Class addChild(new App() as DisplayObject); } } } |
|
|||||
|
[++]
|
Не помогает(Всё та же ошибка с классами, расширяющими базовые классы, которые лежат в swc-либах((
1017: The definition of base class *** was not found. где *** - базовый класс из swc (мувиклипы с определённой графикой внутри) Добавлено через 32 часа 8 минут Хм... Долго танцевал с бубном, во флэше поставил export classes in frame 2, а всем мувикам из библиотеки поставил галку Export in frame 2. Теперь классы исправно подхватываются, но вот толку ноль - всё загружается также, как и загружалось) Попробовал сделать с директивой [Frame, но теперь прямые ссылки на мой класс отсутствуют и, как следствие, он не включается в экспортируемыую флэшку и getDefinitionByName выдаёт соотв. ошибку, что класс не найден! Как заставить FlashBuilder 4.6 заинклудить класс, при этом сделать это "во 2й фрейм" - никак?? Сделал костыль во Flash CS6 - два кадра, на первый поставил добавление прелоадера на сцену, на 2й - создание класса игры. Работает исправно. Но загружается, собака, целиком на 100%, потом только отображается (согласно bandwith profiler'у - загружено 0 кадров до момента загрузки на 100%). Видимо для классов, экспортированных в swc не работает настройка export in frame n?? В общем ситуация тупиковая по всей видимости... |
|
|||||
|
Регистрация: Oct 2012
Сообщений: 14
|
Nucer, эта тема обсуждалась здесь. Действительно мета-тег Frame не работает. Как решение можно использовать ключ компилятора называемый frame.
Т.е. тебе нужно просто вписать в FB окно Project - Properties - ActionScript Compiler в поле Additional compiler arguments строчку -frame two Main, где Main имя класса, который будет создан после загрузки прелоадера. Подробно про ключ frame написано здесь и здесь. Класс Preloader и связанный с ним класс Main должны находится в корне проекта. Иначе выходит ошибка. |
|
|||||
|
[++]
|
Получилось!!! Спасибо огромное
)) |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|