2011-10-23 11 views
0

これはとても奇妙で、この記事では文句を言わない私はハローHIまたはハウディ多分キャッシュの問題で文を始めましょう私の知識が限られているので、とにかく、こんにちは、私は期待して、AS3に非常に非常に新しいですあなたは新しい人でそれを簡単に取ることができます:)。 私はループアニメーションでFlashサイトを構築していると私は、バックグラウンドミュージックとしてMP3の曲を追加しましたが、それはまた、ループやオートプレイに設定されています。問題は、この曲は、アニメーションよりも長いこと、あり、そしてアニメーションがバックフレーム1になったときに、歌はまだ遊んだ1と重なります。私は曲が完全に終了してから再び再生を開始したいです。確かにコードが紛れているかもしれませんが、私が望むものに近づきました。ちょっと磨くためにあなたの助けが必要です。ここmp3ルーピング問題-ActionScript 3の

コードは、これまでで

import flash.events.MouseEvent; 
import flash.media.Sound; 
import flash.net.URLRequest; 

//var codes 
var AutoPlay:Boolean=true; 
var isPlaying:Boolean=false; 
var pausePosition:Number=0; 
var myMusic:Sound=new Sound(); 
var soundFile:URLRequest=new URLRequest("Fluke.mp3"); 
myMusic.load(soundFile); 
var channel:SoundChannel; 

//if commands 
if (AutoPlay==true) { 
channel=myMusic.play(pausePosition); 
isPlaying=true; 
} 

//pausebutton functions 
pause_btn.addEventListener(MouseEvent.CLICK, pauseSound); 
function pauseSound(e:MouseEvent):void 
{ 
if (isPlaying == false) { 
channel = myMusic.play(pausePosition); 
isPlaying =true; 
}else{ 
pausePosition=channel.position; 
channel.stop(); 
isPlaying=false; 
} 
} 

//playbutton functions 
play_btn.addEventListener(MouseEvent.CLICK,playMus ic); 
function playMusic(event:MouseEvent):void 
{ if (isPlaying== false) { 
channel=myMusic.play(pausePosition); 
isPlaying=true; 
} 
} 


THIS完全に動作するコードは、曲が完成演奏後のループであろうと私は追加.addEventListenerで、Joshaのおかげです。

import flash.events.MouseEvent; 
import flash.media.Sound; 
import flash.net.URLRequest; 


//var codes 
var AutoPlay:Boolean=true; 
var isPlaying:Boolean; 
var pausePosition:Number; 
var myMusic:Sound; 
var soundFile:URLRequest; 
var channel:SoundChannel; 

// only create music and register event listeners one time 
if (myMusic == null) 
{ 
    soundFile = new URLRequest("Fluke.mp3"); 
myMusic = new Sound(); 
    myMusic.load(soundFile); 
pausePosition = 0; 
if (AutoPlay) 
    { 
    channel = myMusic.play(pausePosition); 
isPlaying = true; 
    } 
    else 
    { 
isPlaying = false; 
} 
pause_btn.addEventListener(MouseEvent.CLICK, pauseSound); 
play_btn.addEventListener(MouseEvent.CLICK, playMusic); 
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 
} 

channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 
function onPlaybackComplete(event:Event) { 
pausePosition = 0; 
channel = myMusic.play(pausePosition); 
isPlaying = true; 
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 
} 


//playbutton functions 
function pauseSound(e:MouseEvent):void 
{ 
    if (isPlaying == false) { 
    channel = myMusic.play(pausePosition); 
    isPlaying =true; 
    channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 
    }else{ 
    pausePosition=channel.position; 
    channel.stop(); 
    isPlaying=false; 
    } 
} 

//playbutton functions 
function playMusic(event:MouseEvent):void 
{ 
    if (isPlaying== false) { 
    channel=myMusic.play(pausePosition); 
    isPlaying=true; 
    channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); 
    } 
} 

答えて

0

私はまだコメントを置き、その答えを使用することはできません。

あなたはASファイルを別々にコードを置いています。またはこのコードはアニメーションの最初のフレームに配置されていますか?

後者のような場合は、その確かにあなたが重複してしまいますサウンド。 actionscriptコードは、再生ヘッドがフレーム1に戻るたびに実行されるため、新しいSoundオブジェクトを作成し、そのサウンドを再生し始めます。

簡単な解決策は、最後のフレームにキーフレームを作成し、次のアクションスクリプトを追加することです:

gotoAndPlay(2); 

これがループアニメーションフレーム2から、アクションスクリプトをスキップ。

働くかもしれないもう一つの解決策(あなたはそれをテストする必要があります):

import flash.events.MouseEvent; 
import flash.media.Sound; 
import flash.net.URLRequest; 


//var codes 
var AutoPlay:Boolean=true; 
var isPlaying:Boolean; 
var pausePosition:Number; 
var myMusic:Sound; 
var soundFile:URLRequest; 
var channel:SoundChannel; 

// only create music and register event listeners one time 
if (myMusic == null) 
{ 
    soundFile = new URLRequest("Fluke.mp3"); 
    myMusic = new Sound(); 
    myMusic.load(soundFile); 
    pausePosition = 0; 
    if (AutoPlay) 
    { 
    channel = myMusic.play(pausePosition); 
    isPlaying = true; 
    } 
    else 
    { 
    isPlaying = false; 
    } 
    pause_btn.addEventListener(MouseEvent.CLICK, pauseSound); 
    play_btn.addEventListener(MouseEvent.CLICK, playMusic); 
} 

//playbutton functions 
function pauseSound(e:MouseEvent):void 
{ 
    if (isPlaying == false) { 
    channel = myMusic.play(pausePosition); 
    isPlaying =true; 
    }else{ 
    pausePosition=channel.position; 
    channel.stop(); 
    isPlaying=false; 
    } 
} 

//playbutton functions 
function playMusic(event:MouseEvent):void 
{ 
    if (isPlaying== false) { 
    channel=myMusic.play(pausePosition); 
    isPlaying=true; 
    } 
} 
+0

男は、私はこれを理解しようとしているナットつもりだった、ありがとうございました。私は私が同じことをやろうとしているように、それはすべてのルーキーをloop.Forなるようにイベントリスナーを追加する必要がありました、完全な作業コード、Joshaのおかげで、私の最初のポストで編集されています。 – 4Geist

+0

あなたの歓迎:)ハッピーコーディング;より多くのactionscriptを追加する場合は、MovieClipを外部のactionscriptファイルにリンクする方法をチェックしたいかもしれません。 – Josha

関連する問題