Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Flash/AS3-预加载或流式播放嵌入的声音_Actionscript 3_Flash_Audio_Stream_Preload - Fatal编程技术网

Actionscript 3 Flash/AS3-预加载或流式播放嵌入的声音

Actionscript 3 Flash/AS3-预加载或流式播放嵌入的声音,actionscript-3,flash,audio,stream,preload,Actionscript 3,Flash,Audio,Stream,Preload,我目前正在flashdevelop的一个项目中工作,我想包括一些音乐。我正在构建一个游戏,所以不能选择多个文件。目前所有资源都是嵌入式的,一个简单的预加载程序加载所有内容(比如flashdevelop默认预加载程序)。 我不想在开始时加载音乐,我宁愿在需要时流式播放 是否可以流式播放嵌入的声音? 如果没有,是否可以将这些文件嵌入到.swf文件中并稍后加载 提前谢谢 你可以做两件事。一种是在初始加载完成后开始加载声音,并将其保存在字典中。第二个是从Flash导出一个RSL(运行时共享库),这是一个

我目前正在flashdevelop的一个项目中工作,我想包括一些音乐。我正在构建一个游戏,所以不能选择多个文件。目前所有资源都是嵌入式的,一个简单的预加载程序加载所有内容(比如flashdevelop默认预加载程序)。 我不想在开始时加载音乐,我宁愿在需要时流式播放

是否可以流式播放嵌入的声音? 如果没有,是否可以将这些文件嵌入到.swf文件中并稍后加载


提前谢谢

你可以做两件事。一种是在初始加载完成后开始加载声音,并将其保存在
字典中。第二个是从Flash导出一个RSL(运行时共享库),这是一个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");
在第二种方法中,您必须执行更多步骤,但只需加载一次。我将在此处列出步骤:

  • 制作新的Flash文档(FLA)
  • 将您需要的所有声音导入库
  • 在每个声音的属性菜单中,选择Actionscript选项卡,勾选Export for Runtime Share复选框,并填写output 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中,它将同时被加载,因为它是一个文件,被加载到一个网页上。