1

次の例を使用してMP3ファイルを再生します([開く]ダイアログは必要ありません)。

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">

<fx:Script>
    <![CDATA[
        import flash.media.*;
        [Embed(source="assets/marseljeza.mp3")]

              [Bindable]
        public var sndCls:Class;
        public var snd:Sound = new sndCls() as Sound; 
        public var sndChannel:SoundChannel;

        public function playSound():void {
            sndChannel=snd.play();
        }   
        public function stopSound():void {
            sndChannel.stop();
        }   
    ]]>
</fx:Script>

<s:HGroup>
    <s:Button label="play" click="playSound();"/>
    <s:Button label="stop" click="stopSound();"/>
</s:HGroup>
</s:View>`

PLAYボタンをクリックした後、MP3ファイルは問題なく再生されますが、PLAYボタンをもう一度クリックすると、曲は最初から同時に最初からやり直します。ボタンを3、4、5以上クリックしても同じです。回数。そのため、同じ曲の「セッション」が同時に発生することになります。最初のクリック後にPLAYボタンを無効にし、STOPをクリックした後に同じボタンを再度有効にします。これどうやってするの?

4

1 に答える 1

0

特定の質問に答えるには、ボタンのenabledプロパティを使用できます。playSound()メソッド内で、これを実行します::

public function playSound():void {
    sndChannel=snd.play();
    playButton.enabled = false;
}   

必ずplayButtonにIDを追加してください。

<s:Button id="playButton" label="play" click="playSound();"/>

すでに再生中のサウンドを再生しないように、playSound()メソッド内にチェックを追加することを検討することをお勧めします。これを行うには、最初に変数を作成します。

protected var isPlaying : Boolean = false;

次に、playButton()メソッドを次のように微調整します。

public function playSound():void {
   if(!isPlaying){
    sndChannel=snd.play();
    isPlaying = true;
   }
}   

上記のいずれの状況でも、ボタンを再度有効にするか、isPlayingフラグを変更するために、イベントリスナーを完全なイベントに追加することをお勧めします。アプローチは次のようになります。

public function playSound():void {
   if(!isPlaying){
    snd.addEventListener(Event.COMPLETE,onSoundComplete);
    sndChannel=snd.play();
    isPlaying = true;
   }
}   

public function onSoundComplete(event:Event):void{
  isPlaying = false;
  playButton.enabled = true;
  snd.removeEventListener(Event.COMPLETE,onSoundComplete);
}

ストップサウンドメソッドからonSoundCompleteメソッドを呼び出すこともできます。

    public function stopSound():void {
        sndChannel.stop();
        onSoundComplete(new Event());
    }   
于 2012-10-02T20:37:51.047 に答える