1

サウンドファイルを再生していますが、onclickで別のファイルの再生を開始したいと思います。

次の例で、機能PlayAnother()を確認できます。

private var TheSound:Sound = new Sound();           
private var mySoundChannel:SoundChannel = new SoundChannel();

private function PlaySound(e:MouseEvent):void
{       
    TheSound.load(new URLRequest("../lib/File1.MP3"));
    mySoundChannel = TheSound.play();
}

private function PlayAnother(e:MouseEvent):void
{           
    mySoundChannel.stop();
    TheSound.load(new URLRequest("../lib/File2.MP3"));          
}

public function Test1():void 
{
    var Viewer:Shape = new Shape();
    Viewer.graphics.lineStyle(0, 0x000000);
    Viewer.graphics.beginFill(0x000000);
    Viewer.graphics.drawRect(0, 0, 1, 10);
    Viewer.graphics.endFill();  
    Viewer.width = 30;
    Viewer.x = 10;

    var Viewer1:Shape = new Shape();
    Viewer1.graphics.lineStyle(0, 0x000000);
    Viewer1.graphics.beginFill(0x000000);
    Viewer1.graphics.drawRect(0, 0, 1, 10);
    Viewer1.graphics.endFill();         
    Viewer1.width = 30;
    Viewer1.x = 50;

    var tileSpot:Sprite = new Sprite();
    var tileSpot1:Sprite = new Sprite();
    tileSpot.addChild(Viewer)
    tileSpot1.addChild(Viewer1)
    addChild(tileSpot);
    addChild(tileSpot1);

    tileSpot.addEventListener(MouseEvent.CLICK, PlaySound);
    tileSpot1.addEventListener(MouseEvent.CLICK, PlayAnother);      
}       

しかし、エラーが発生します(関数が誤った順序で呼び出されたか、以前の呼び出しが失敗しました)。

誰か助けてくれませんか。

4

1 に答える 1

1

すでにデータが含まれているSoundオブジェクトに新しいファイルをロードしているため、Flashが文句を言っています。(ここでSound.load()のドキュメントを見ると、「Soundオブジェクトでload()が呼び出されると、後でそのSoundオブジェクトに別のサウンドファイルをロードすることはできません」と表示されます)。

play()File2をロードして再実行する前に、新しいサウンドをインスタンス化する必要があります。

private function PlayAnother(e:MouseEvent):void
{           
    mySoundChannel.stop();
    TheSound = new Sound();
    TheSound.load(new URLRequest("../lib/File2.MP3"));      
    mySoundChannel = TheSound.play();    
}
于 2013-01-20T01:44:26.707 に答える