![]() |
[*ОТВЕТ*]Аттач мувика из внешнего swf-файла
Вложений: 1
Это не вопрос, это ответ :) В ActionScript 3.0 появилась возможность, которую очень давно ждали, возможность загрузить произвольный swf-файл и приаттачить в произвольное место мувик из библиотеки (library) этого файла. Возможность-то появилась, вот только метод совсем не очевидный, я провозился больше часа, пока получилось, а в инете нормального примера не нашел. Потому и публикую пример для потомков.
1. Создаем новый flash document под названием "avatars.fla" 2. Создаем в библиотеке новый мквиклип, назовем его "avatar", ставим галочки "Export for ActionScript" и "Export in first frame". Рисуем в мувике что-нибудь жизнеутверждающее :) 3. Компилим нашу библиотеку, получаем avatars.swf. Теперь задача добыть из этого файла мувик "avatar". 4. Создаем новый flash document под уже привычным названием Test.fla 5. Ставим Document class = Test 6. Пишем следующий скрипт Test.as: Код:
package {Одна деталь, так можно аттачить только мувиклипы из AS3, если загруженный .swf файл будет версии AS2 или 1, то ничего не получится. Этот пример в аттаче. |
Ага делал что-то подобное, только без applicationDomain.getDefinition не знал, зачем это и как это работает. Просто писал функцию в корневом классе, которая возвращала ссылку на класс внутри .swf файла.
что-то типа Код:
function (className:String):Class |
Если во flex создать as приложение, то он ругается на эту строчку.
Код:
var a:Class = info.applicationDomain.getDefinition("avatar"); |
Цитата:
|
Использую твой avatar.swf
А во flex выбираю actionscript project |
Цитата:
Тебе нужно объявить класс. Давай исходник avatar |
Я не менял ничего в исходнике, просто хочу чтобы во flex то же самое сработало а когда вставляю код test.as он пишет ошибку про которую уже написал выше. Не понимаю что за класс еще писать надо.
|
Навскидку, а кастить в Class не надо?
|
Внедряем мувики
я делаю это так. допустим есть fla файл в котором все мувики лежат в библиотеке. допустим у меня есть мувик с названием movie1. компилим эту библиотеку.
дальше у меня есть какой нибудь класс под названием class1 наследованный от Sprite. я не хочу использовать Flash 9 так как глючное создание и медленное, поэтому я использую Flex AS Project. но внедрить то муувик из библиотеки мне нужно. ок! берем хелп по AS и находим мета тег Embed.. то что доктор прописал. итог такой: Код:
|
а по поводу getDefinitionByName то работать будет только если у вас уже есть экземпляр класса... это макромедийцы недоглядели...
|
А если нужно цельный мувик с кучей мувиков внутри заембедить то делаю я это так
Код:
[Embed(source="/library.swf#MyMovie"]библиотеке, и не надо его вытягивать на стейдж и т.д. P.S. извиняюсь за использование чужого кода... я его немножко подправил :) |
Цитата:
|
Цитата:
Если тебя интересует графика статическая! Тогда канешно да - юзаешь ембед и МувиКлипАссет допустим. Разные цели - разные решения |
Товарищи, так и не дошло...
А без ЭМБЕД как? Если мне нудо сначало загрузить флэшку, а потом достать из её либы мувик? Уже день бьюсь... Это днк? |
getDefinition спасет отца русской демократии.
|
так applicationDomain еррор выдает
а "var ad:ApplicationDomain = new applicationDomain();" тоже 1067: Implicit coercion of a value of type Boolean to an unrelated type Class. Это днк... ничего не понимаю... :( |
Теперь точно ДНК.
loader.contentLoaderInfo.applicationDomain.getDefinition |
Спасибо:)
|
Скачал исходник, запустил, скомпелировал = всё получилось.
Создаю новый fla файл (в этой же директории) пишу Document class = Test жму Ctrl+Enter выдаётся ошибка 1118: Implicit coercion of a value with static type Object to a possibly unrelated type Class. думаю что то упустил. решил покопаться в настройках документа Test.fla и сравнить со своим New.fla. Искал искал ничего отличительного не нахожу - тот же FPS разрешение экраза. В File\Publish Settings\Flash стоят ActionScript 3.0 и две галочки апротив Compress movie и Export hidden layers. Что за ботва? :wacko: и тут решил зайти в Settings напротив ActionScript version. Бинго! в файле Test.fla галочки стоят только напротив Warning mode и Reduce file size and increase perfomance. полчается это зависит от Strict Mode объясните пожалуйста в чём прикол. |
var a:Class = info.applicationDomain.getDefinition("mcTest") as Class; <---
|
Цитата:
|
Ага. именно так.
Юзай ФлексБилдер. |
у него ник nekro )
|
| Часовой пояс GMT +4, время: 00:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.