![]() |
|
||||||||||
|
|||||
|
Первый раз сталкиваюсь с подобной задачей, и что-то не пойму как поступить.
В приложении реализована вся необходимая логика геймплея, есть все необходимые мувиклипы. Теперь задача стоит в том чтобы на разных уровнях менять графику в определенных мувиклипах. Т.к. графики много, то возникла необходимость делать подгрузку индивидуально для каждого уровня. Так вот, муви клип который содержит 1 леер с 1 кадром, в нем лежит 1 схематичная картинка (просто вложенная руками из библиотеки флэша). Я бы хотел подгружать SWF в котором лежит несколько картинок, и заменять их на текущие схематичные картинки, которые находятся в мувиклипе по умолчанию. Т.е. не могу найти как сделать программный swap картинки в мувиклипе из подгружаемого swf. Если знаете как это сделать, подскажите пожалуйста. Добавлено через 31 минуту Тут видимо из загружаемого swf нужно делать каким то образом массив битмап картинок, которые потом можно будет положить в мувиклип. Есть идеи как можно сделать такой массив? Добавлено через 3 часа 8 минут если в SWF находится одна картинка то загрузить не проблема, я не могу найти способ получить доступ к библиотеки внешнего SWF если там много картинок. Помогите пожалуйста. |
|
|||||
|
Цитата:
Логика такая. У Вас есть: - Загрузчик, который грузит skins.swf с клипами, картинками и видео. - Есть парсер, который разбирает загруженный skins.swf на модули и добавляет на сцену всё, что необходимо из загруженного клипа. Если необходимо поменять набор скинов - грузите другой skins_new.swf с теми же названиями клипов, картинок и т.п. но контент там другой. Это решение может подойти? Добавлено через 2 минуты Сорри, не заметил этого сообщения. Буду за компом - скину пример.
__________________
http://artem-lobachenkov.ru/ |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
В идеале, чтобы всё было упорядочено и предсказуемо, skin.swf должна иметь классом документа определенный класс (а лучше Интерфейс), в котором явно прописаны все необходимые геттеры на все ресурсы, которые такой файл скина должен содержать. Тогда и "разбирать" его проще, напрямую обращаясь к нужным свойствам, и контроль и порядок будут гарантированы. Если использовать Интерфейс, скажем ILevelSkin, то сами классы swf-ок могут быть и разными, но главное что это проще для основной флэшки — не надо импортировать конкретный класс (хотя, с другой стороны, какой-то первый дефолтный скин все-равно наверное будет содержаться в основной флэшке, хотя и необязательно).
__________________
Reality.getBounds(this); |
|
|||||
|
Прислушайтесь к совету Wolsh.
Набросал код. package { import flash.display.Loader; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; import flash.utils.getDefinitionByName; public class TestLoading extends Sprite { protected var loader:Loader = new Loader(); protected var skinsAppDomain:ApplicationDomain = new ApplicationDomain(); public function TestLoading() { this.init(); } private function init():void { this.load(); } private function load():void { var context:LoaderContext = new LoaderContext(false, this.skinsAppDomain); // this.loader.contentLoaderInfo.addEventListener(Event.INIT, this.onLoaded); this.loader.load( new URLRequest('skins.swf'), context ); } protected function onLoaded(event:Event):void { // Symbol2 это Linkage-Class клипа во флешке skins.swf var SymbolFromLibrary:Class = this.skinsAppDomain.getDefinition('Symbol2') as Class; var clipFromLibrary:MovieClip = new SymbolFromLibrary(); super.addChild(clipFromLibrary); } } }
__________________
http://artem-lobachenkov.ru/ |
|
|||||
|
Ребята спасибо, уже нарыл подобное решение.
Т.к. я хочу обойтись без внешних классов, делаю все в одном документКлассе - решил спрайты конвертировать в мувиклипы чтобы не пришлось ничего расширять. Получилось следующим образом: |
|
|||||
|
Если полностью отобразить функцию лоадера, то получится следующее: (будет полезно для новичков как я
):private function loaderBlocks():void { var loader:Loader = new Loader(); //создаем лоадер loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); // проверяем полную загрузку, чтобы добавить загруженный объект loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); // устанавливаем слушатель прогресса loader.load(new URLRequest("res/blocks-3x3_0.swf")); //загружаем необходимый swf файл function onComplete(e:Event):void { var blockClass:Class = e.target.applicationDomain.getDefinition("b1"); // класс блока из загруженного SWF, указывается в AS Linkage var block:MovieClip = new blockClass(); addChild(block); // или ставите куда потребуется } function onProgress(e:ProgressEvent):void { trace (e.target.bytesLoaded/e.target.bytesTotal); // расчитываем процент загрузки лоадера } } Последний раз редактировалось pestryakov; 04.07.2012 в 16:32. |
|
|||||
|
я ее произвел руками - спрайт превратил в мувиклип - F8.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 22:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|