Просмотр полной версии : Как осуществить доступ к контенту в "[Embed(source =" ?
В АС3 я полный чайник, поэтому заранее прошу снисхождений :)
Итак. Работаю в FB. Есть необходимость встроить в проект звуки. Куча мелких звуков на всякие там открыть-закрыть окно и прочее.
Как я понимаю, в компиленный MAIN.SWF на выходе ФлэшБилдера можно встраивать внешние SWF.
Судя по тому, что вес MAIN увеличивается, встраивание происходит. Как-то.
Во flash IDE создаю AS3 проект, кидаю в него свои звуки, прописываю им в linkage SND1, SND2, ... SNDx
В ФБ в коде пишу:
[Embed(source = "../assets/soundFork.swf", mimeType = 'application/octet-stream')]
И вот далее - как же мне теперь сделать
var snd:Sound = new ( SND1 )(); ?
То есть как зарегистрировать этот встроенный контент для доступа?
Дарк, точно по сабжу не помогу, но посоветую использовать SWC.
Aquahawk
14.03.2012, 14:06
http://www.bit-101.com/blog/?p=853
Если в крадце по русски то надо сделать
[Embed(source="assetname")]
private var AssetClass:Class;
и потом
new AssetClass() as ЧтоОноТамУТебя
HardCoder
14.03.2012, 14:14
[Embed(source="assetname")]
private var AssetClass:Class;Немного дополню:[Embed(source="library.swf", symbol="НазваниеСимволаЗвука(его linkage класса)")]
private var AssetClass:Class;
Добавлено через 1 минуту
потом:var snd:Sound = new AssetClass();
[Embed(source="library.swf", symbol="НазваниеСимволаЗвука(его linkage класса)")]
Ага, а с учетом того, что "его linkage класса" там допустим 100 штук - для каждого прописать?
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Sound;
import flash.system.ApplicationDomain;
import flash.utils.ByteArray;
public class TestSound extends Sprite
{
[Embed(source = "../assets/soundFork.swf", mimeType = 'application/octet-stream')]
private var _soundFork:Class;
private var _appDomain:ApplicationDomain;
public function TestSound()
{
super();
var ba:ByteArray = new _soundFork();
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
loader.loadBytes(ba);
}
private function onLoaded(event:Event):void
{
var loader:Loader = event.currentTarget.loader;
_appDomain = loader.contentLoaderInfo.applicationDomain;
getSound("SND1").play();
getSound("SND2").play();
}
private function getSound(name:String):Sound
{
if(_appDomain.hasDefinition(name))
{
var sc:Class = _appDomain.getDefinition(name) as Class;
var s:Sound = new sc();
return s;
}
return null;
}
}
}
Aquahawk
14.03.2012, 14:26
Ага, а с учетом того, что "его linkage класса" там допустим 100 штук - для каждого прописать?
зачем? я так понимаю можно всю swf заэмбеддить, а потом applicationDomain.getDefinition.
Ещё можно экспортнуть эту же swf в FlashIde как swc, и подключить к проекту её как external, тогда будет и статическая типизация и всё хорошо. ТОлько смысла особого эмбеддить swf и использовать внешнюю swc нету. Я так делал когда в рантайме подгружал swf и классы которые в ней есть объявлялись через external swc.
ОГРОМНЕЙШЕЕ ВСЕМ спасибо!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.