Вы можете сделать две вещи. Один из них - начать загрузку звуков после завершения начальной загрузки и, возможно, сохранить их в Dictionary
. Во-вторых, для экспорта RSL (Runtime Shared Library) из Flash, который является SWF-файлом, который вы можете загрузить и получить доступ ко всем классам, определенным там.
В первом подходе вы в основном загружать каждый звук, как это и сохранить их в словаре:
import flash.media.Sound;
import flash.events.Event;
import flash.net.URLRequest;
import flash.utils.Dictionary;
var mSounds:Dictionary = new Dictionary();
function loadSound(url:String, soundName:String)
{
var sound:Sound = new Sound();
sound.addEventListener(Event.COMPLETE, onSoundLoadComplete);
sound.load(new URLRequest(url));
function onSoundLoadComplete(e:Event):void
{
sound.removeEventListener(Event.COMPLETE, onSoundLoadComplete);
trace(soundName,"Sound Loaded");
mSounds[soundName] = sound; // save it to dictionary
// then you can load it from dictionary
// using the name you assigned
if(mSounds["crystalised"])
(mSounds["crystalised"] as Sound).play();
}
}
loadSound("C:\\Users\\Gio\\Desktop\\Crystalised.mp3", "crystalised");
Во втором подходе вы должны сделать больше шагов, но загрузить его один раз. Я перечислю шаги здесь:
- Сделать новый документ (FLA)
- Импортировать все звуки, которые вы должны библиотеке
- В меню свойств каждого звук выберите вкладку Actionscript и клещ флажок Экспорт для общего доступа Время воспроизведения и введите имя для выходного SWF
После публикации этого FLA вы можете загрузить его в приложение или игру и использовать его как это:
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.system.ApplicationDomain;
import flash.system.SecurityDomain;
import flash.events.Event;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.utils.getDefinitionByName;
function loadRSL(url:String):void
{
var loader:Loader = new Loader();
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onRSLLoadComplete);
loader.load(new URLRequest(url), context);
function onRSLLoadComplete(e:Event):void
{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onRSLLoadComplete);
trace("RSL Loaded");
// creating a new instance of the sound which is defined in RSL
var soundClass:Class = getDefinitionByName("Crystalised") as Class;
var sound:Sound = (new soundClass() as Sound);
sound.play();
}
}
loadRSL("SoundLibrary.swf");
Благодарим вас за четкое объяснение! Кажется, что это невозможно сделать с помощью одного SWF? –
Нет. Это единственные пути, о которых я знаю. Если вы поместите все в один SWF, все будет загружено одновременно, так как это один файл, который загружается на веб-страницу. – Gio