1

これを処理する最善の方法を考えています

XML ファイルからサウンド (audioMP3) を正常にロードし、EventListener で IO エラーを処理しています。

MP3 が利用できる場合はステージ上で画像を表示し、MP3 がない場合は別の画像を表示したいと考えています。

私はIOエラーにアクセスし、それを条件付きで使用して画像を選択しようとしました。たとえば、IOエラーがある場合はbtnAudioNoを表示し、そうでなければbtnAudioYesを表示します

eventLister は次のとおりです。

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);
}

私の質問は、これを機能させるにはどうすればよいですか、(XML ファイルで) 利用可能な MP3 ファイルがあるかどうかを判断し、適切な画像を表示するためのより良い方法はありますか?

ご提案いただきありがとうございます。

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 に答える