1

多言語ナレーション付きの多言語フラッシュ ゲームを作成しています。これまでのところ、オーディオ ストリームと歌詞を含む 1 つの言語を独自のタイムラインに追加し、メイン タイムラインのボタンで一時停止して再生することができました。このシーンの言語ごとに、オーディオと独自の歌詞 (カラオケ スタイル) を使用して、さらに 2 つの言語を追加したいと考えています。最終的には、言語 (オーディオと歌詞) を切り替えて、最後の言語が中断したところからシームレスに続行するボタンをメイン タイムラインに配置します。今までは、オーディオと歌詞を制御するメイン タイムラインからこのアクションを使用していました。englyr はムービー クリップで、音声と歌詞が含まれています。

toggleButton.addEventListener(MouseEvent.CLICK, toggleClick3);
toggleButton.buttonState = "off";

function toggleClick3(event:MouseEvent) {
    if (toggleButton.buttonState == "on") {
        englyr.play();
        toggleButton.buttonState = "off";
    } else {
        toggleButton.buttonState = "on";
        englyr.stop();
    }
}

他の 2 つの言語とその歌詞を englyr に入れる必要があると想定しています。これにより、聞いたり見たりする必要のない言語を無効化/ミュートできるようになります。問題の 1 つは、そのタイムラインで歌詞とナレーション (2 つのレイヤー) をムービー クリップとしてグループ化できないことです。したがって、聞いたり見たりしてはならない他の 2 つの言語を無効にすることはできません。解決策はありますか?

4

1 に答える 1

0

タイムライン経由ではなく、コードから両方を再生できるようにする方がおそらく簡単です。最初に行うことは、ライブラリ内のオーディオ クリップの設定に移動し、[Actionscript 用にエクスポート] を有効にして、両方のクリップに異なるクラス名を設定することです。私は自分の名前を「英語」と「フランス語」にしました。次のコードは、2 つのサウンドを管理し、現在再生されていない言語のボタンを押したときに言語を変更します。

var englishClip:Sound = new english(); //load both sounds.
var frenchClip:Sound = new french();

//create the sound and the sound channel.
var myChannel:SoundChannel = new SoundChannel();
var mySound:Sound = englishClip;

//if you want to have lots of different languages it might be easier to just have different buttons instead of one with a state.
englishButton.addEventListener(MouseEvent.CLICK, SpeakEnglish);
frenchButton.addEventListener(MouseEvent.CLICK, SpeakFrench);

//we'll start with having just the english sound playing.
myChannel = mySound.play();

function SpeakEnglish(event:MouseEvent) {
    if (mySound != englishClip) { //if the english sound is already playing, do nothing.
        var currentPlayPosition:Number = myChannel.position; //save playback position.
        myChannel.stop(); //stop playing
        mySound = englishClip.play(currentPlayPosition); //resume playing from saved position.
}

function SpeakFrench(event:MouseEvent) {
    if (mySound != frenchClip) { //if the French sound is already playing, do nothing.
        var currentPlayPosition:Number = myChannel.position; //save playback position.
        myChannel.stop(); //stop playing
        mySound = frenchClip.play(currentPlayPosition); //resume playing from saved position.
}

これは、適切なサウンドを渡す単一の関数を持つことで、よりコンパクトにすることができます。次のようになります。

function SpeakEnglish(event:MouseEvent) {
    ChangeSound(englishClip);
}

function SpeakFrench(event:MouseEvent) {
    ChangeSound(frenchClip);
}

function ChangeSound(newSound:Sound){
    if (mySound != newSound) { //if the sound is already playing, do nothing.
        var currentPlayPosition:Number = myChannel.position; //save playback position.
        myChannel.stop(); //stop playing
        mySound = newSound.play(currentPlayPosition); //resume playing from saved 
}

そして、それは問題を解決するはずです、私はそれが助けになったことを願っています:)

リソース: http://www.republicofcode.com/tutorials/flash/as3sound/

于 2013-06-17T10:45:10.027 に答える