2013-07-14 2 views
2

В настоящее время я работаю над проектом в flashdevelop и хочу включить музыку. Я создаю игру, поэтому несколько файлов не являются опцией. В настоящее время все ресурсы встроены и простой предварительный загрузчик загружает все (например, предварительный загрузчик по умолчанию flashdevelop). Я не хочу загружать музыку в начале, я бы предпочел бы ее передавать по мере необходимости.Flash/AS3 - предустановленные или потоковые встроенные звуки

Возможно ли передавать потоковые звуки? Если нет, возможно ли вставить эти файлы в файл .swf и загрузить их позже?

Заранее благодарен!

ответ

1

Вы можете сделать две вещи. Один из них - начать загрузку звуков после завершения начальной загрузки и, возможно, сохранить их в 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"); 

Во втором подходе вы должны сделать больше шагов, но загрузить его один раз. Я перечислю шаги здесь:

  1. Сделать новый документ (FLA)
  2. Импортировать все звуки, которые вы должны библиотеке
  3. В меню свойств каждого звук выберите вкладку Actionscript и клещ флажок Экспорт для общего доступа Время воспроизведения и введите имя для выходного SWF Export for Runtime Sharing
  4. После публикации этого 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"); 
    
+0

Благодарим вас за четкое объяснение! Кажется, что это невозможно сделать с помощью одного SWF? –

+0

Нет. Это единственные пути, о которых я знаю. Если вы поместите все в один SWF, все будет загружено одновременно, так как это один файл, который загружается на веб-страницу. – Gio