1

我想知道处理这个问题的最佳方法

我成功地从 XML 文件加载声音(audioMP3)并使用 EventListener 处理 IO 错误。

我想在有 MP3 时在舞台上显示图像,或者在没有 MP3 时显示替代图像。

我一直在尝试访问 IO 错误并在条件中使用它来选择图像,例如,如果存在 IO 错误,则显示 btnAudioNo 否则显示 btnAudioYes

这是 eventListemer:

audioMP3.addEventListener(IOErrorEvent.IO_ERROR, onSoundIOError, false, 0, true);
function onSoundIOError (e:IOErrorEvent){
    trace(e.text);
    removeEventListener(IOErrorEvent.IO_ERROR, onSoundIOError)
}

而我狡猾的有条件的尝试:

var btnAudioYes:Bitmap = new Bitmap(new(getDefinitionByName("btnAudioYes")) (0,0) );
var btnAudioNo:Bitmap = new Bitmap(new(getDefinitionByName("btnAudioNo")) (0,0) );
if(ioError = false){
    addChild(btnAudioYes);
}
else {
    addChild(btnAudioNo);
}

我的问题是,我怎样才能让它工作,有没有更好的方法来确定是否有可用的 MP3 文件(在 XML 文件中)并显示适当的图像?

非常感谢您的建议。

4

1 回答 1

1

ProgressEvent 的侦听器(除了 IOErrorEvent),如果您获得进度,则文件存在,您可以取消(关闭)加载程序。除非您希望此时加载整个音频文件,否则请改为侦听完整事件。

loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onSoundProgress, false, 0, true);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSoundLoadComplete); //use this only if you want to load the entire audio file at this point
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onSoundIOError, false, 0, true);

loader.load("your file");

function onSoundIOError (e:IOErrorEvent){
    //this function will only run if the file does not exist
    loader = null;
    var btnAudioNo:Bitmap = new Bitmap(new(getDefinitionByName("btnAudioNo")) (0, 0) );
    addChild(btnAudioNo);
}

function onSoundProgress(e:ProgressEvent) {
    //this function will only run if the file DOES exist

    loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onSoundProgress); //we don't want this firing again

    var btnAudioYes:Bitmap = new Bitmap(new(getDefinitionByName("btnAudioYes")) (0,0) );
    addChild(btnAudioYes);

    //if you you don't want to actually load the audio file, do this to cancel the load
    loader.close(); //close the loader to keep from loading the rest of the file
    loader.contentLoaderInfo.unloadAndStop(true);
    loader = null;
}

//use this only if you want to load the entire audio file at this point
function onSoundComplete(e:Event):void {
    //do whatever you need to do with the sound...
}
于 2012-08-24T23:25:12.583 回答