removeChildはサウンドを停止する必要はなく、子リストからdisplayObjectを削除して視覚的に削除します。
開始したサウンドを停止したい場合は、removeChildを呼び出すときにそのサウンドチャネルへの参照が必要です。次に、SoundChannel.stop()を使用してください。http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundChannel.html#stop()
もっと正確な答えを得るためには、より多くの情報が必要です。
あなたが試したオプションの1つは、フレーム40のタイムラインの内側からサウンドを再生することです。問題は、displayObjectが既に削除されていても再生されていることです。私の好きな解決策はありませんが、動作するはずです。この場合では、あなたがこれを行うことができます:それは、ステージの上にまだある場合は、こののDisplayObjectのステージはつまり、子として追加された、(存在する場合を意味し、どの
// on frame 40
if (this.stage != null) {
// play sound here
}
をし、まだ削除されていませんでした)、内部のコードが実行されます。突然削除された場合、サウンドは引き続き再生されます。それを止めるには、SoundChannelへの参照が必要です。オブジェクトの内部から、addEventListener(Event.REMOVED_FROM_STAGE, func)
を使用してオブジェクトがいつ削除されたかを知り、参照されている関数の中でSoundChannel.stopコードを実行することができます。
- 編集:オブジェクトを作成するときに実際にこれを行うための適切な方法は、実際のタイムライン
の内側ではありません、それにイベントを追加します。
myObjectWithSoundInside.addEventListener(Event.REMOVED_FROM_STAGE, objRemoved)
function objRemoved (event:Event):void {
// This is where you SoundChannel.stop()
}
次にあなたがremoveChild(myObjectWithSoundInside)
を実行すると、 objRemovedの内部コードが正しく、適切に参照されていると仮定して、サウンドは停止するはずです。
出典
2012-03-14 04:01:34
ido
返信いただきありがとうございます!したがって、オブジェクト(scene1)内にREMOVED_FROM_STAGEイベントを使用するように選択した場合は、フレーム40の内部に関数を作成しますか?また、フレーム40にチャンネルとサウンドオブジェクトを作成しますか?私がムービークリップの中からチャンネルにアクセスしようとすると、エラーが出るので、チャンネルとサウンドインスタンスをオブジェクトの中に入れなければなりません。これは恐ろしい方法です。 – nobi
タイムラインの中にそれらを置くことは本当にこれを行う悪い方法です。あなたのプロジェクトの構造を理解しているかどうか分かりません。 とにかく、同じこと - 外部からもイベントREMOVED_FROM_STAGEを引き出すことができます。そこでは、SoundChannelを適切に参照して停止させることができます。更新された回答を確認してください。 – ido