2010-03-07 43 views
0

我试图通过创建一个包含每个声音的文件路径(或名称)的字符串数组来实例化一串声音。Actionscript加载/调用字符串数组中的声音

var soundByName:Object = {}; 
var channelByName:Object = {}; 
var soundName:String; 
var channelName:String; 
loadSounds(); 

function loadSounds():void 
    { 
    var files:Array = new Array("sound1.mp3", "sound2.mp3"); //etc. 
    for (var i:int = 0; i < files.length; i++) 
     { 
     soundName = files[i]; 
     soundByName.soundName = new Sound(); 
     soundByName.soundName.addEventListener(Event.COMPLETE, sound_completeHandler); 
     soundByName.soundName.addEventListener(IOErrorEvent.IO_ERROR, sound_ioErrorHandler); 
     soundByName.soundName.load(new URLRequest(soundName)); 
     } 
    } 

function sound_completeHandler(e:Event):void 
    { 
    channelName = e.currentTarget.name; 
    channelByName.channelName = new SoundChannel(); 
    } 

function sound_ioErrorHandler(e:IOErrorEvent):void 
    { 
    trace("Failed To Load Sound:" + e.currentTarget.name); 
    } 

然后叫这样的:

//Stop a sound 
channelByName["sound1.mp3"].stop(); 

//Play a sound 
channelByName["sound2.mp3"] = soundByName["sound2.mp3"].play(); 

我当前的代码包含了从sound_completeHandler()函数,指出“名称”属性没有被发现的错误。我无法弄清楚如何添加这个名称属性,或者如何引用e.currentTarget。

回答

2

你的代码是错误的3个部分:

  • soundByName是一个对象,你正在做一个soundByName.soundName=new Sound() =>您正在创建一个名为内soundByName soundName场。 使用soundByName[soundName]=new Sound();这意味着创建一个名称取自变量coundName的字段。

  • 你正在做channelByName同样使用channelByName[channelName]=value;

  • 然后,你想从你的名字soundChannel关联,它不能正常工作Sound对象有没有这样的领域。使用字典将声音与名称关联起来。

    var nameBySound:Dictionary = new Dictionary(); 
    var soundByName:Object = {}; 
    var channelByName:Object = {}; 
    loadSounds(); 
    
    function loadSounds():void { 
        var files:Array = ["sound1.mp3", "sound2.mp3"]; //etc. 
        for (var i:int = 0; i < files.length; i++) { 
        var soundName:String = files[i]; 
        var sound:Sound=new Sound(); 
        nameBySound[sound] = soundName; 
        soundByName[soundName] = sound; 
        sound.addEventListener(Event.COMPLETE, sound_completeHandler); 
        sound.addEventListener(IOErrorEvent.IO_ERROR, sound_ioErrorHandler); 
        sound.load(new URLRequest(soundName)); 
        } 
    }                   
    
    function sound_completeHandler(e:Event):void {       
    var soundName:String=nameBySound[e.currentTarget];      
    channelByName[soundName] = new SoundChannel();       
    }                   
    
    function sound_ioErrorHandler(e:IOErrorEvent):void { 
    trace("Failed To Load Sound:" + nameBySound[e.currentTarget]); 
    } 
    
+0

谢谢。这很好。我一直在阅读有关字典课的意思。在你看来,你认为我的这种方法是加载/调用很多声音的好方法吗? – TheDarkIn1978 2010-03-07 09:22:22

+0

那么你可以例如只使用一个字典来将所有信息放入(名称,声音,声道)中。这也取决于你对代码的使用。 – Patrick 2010-03-07 10:39:51

+0

感谢这个例子Patrick。 – daidai 2010-10-17 23:05:32