Звучит так, будто вам нужен класс SoundManager или что-то подобное, который кэширует нужные вам звуки, чтобы вы могли воспроизводить их в любое время, когда они загружаются только один раз. Подобные классы, где вам нужен только один экземпляр класса, являются хорошими кандидатами на роль одиночек. Существует множество способов реализации одноэлементного дизайна. В ActionScript мой любимый способ такой:
//in SoundManager.as
public static var instance:SoundManager = new SoundManager();
Просто, и это работает. Поскольку план состоит в том, что вам когда-нибудь понадобится только один SoundManager, теперь вы можете получить этот экземпляр в любом другом месте своего кода, например:
var soundManager:SoundManager = SoundManager.instance;
//or, more likely you can just use it in-line like this
SoundManager.instance.myMethod();
Итак, теперь у вас есть SoundManager. Давайте настроим его так, чтобы он содержал кэш звуков, чтобы они загружались только один раз:
// in SoundManager.as
private var _soundCache:Array = [];
public function getSound(soundName:String):Sound {
var testSound:Sound = _soundCache[soundName] as Sound;
if(!testSound) { //if the sound isn't loaded yet, testSound will be null
//the sound isn't there, so lets load it
var newSound:Sound = new Sound(new URLRequest(soundName));
_soundCache[soundName] = newSound;
return newSound;
}
//if we made it this far it means the sound was in the cache, so we return it
return testSound;
}
И еще, вам нужно загрузить звук только один раз! Когда вы хотите получить звук, это так же просто, как:
var mySound:Sound = SoundManager.instance.getSound("mySound.mp3");
Дайте мне знать, если у вас возникнут проблемы с каким-либо из этого кода, но, надеюсь, этого достаточно, чтобы вы пошли по правильному пути.