Как вызвать функцию из моего приложения main.mxml из класса as3 во Flex - PullRequest
0 голосов
/ 24 февраля 2011

Я пишу класс воспроизведения звука, который останавливает старый звук и воспроизводит новый звук. После этого мне нужен дополнительный метод в этом классе, который запускается, когда воспроизведение звука завершено. Я успешно достигаю этого, но мне нужно сообщить об этом Основное приложение (main.mxml) о завершении воспроизведения этого звука. Как мне это сделать? Заранее спасибо.

вот мой класс воспроизведения звука.

package com.m2b.data
{
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.net.URLRequest;

    import mx.controls.Alert;
public class SoundPlayback
{
    private var channel:SoundChannel = new SoundChannel();
    private var sm:SoundMixer = new SoundMixer();
    public  var snds:Sound; 

    public function SoundPlayback()
    {
        // constructor function
    }
    /** call if need to close all previous sound and play new one **/
    public function playSound():void{
        // the StopAll method is used to close/shutdown all sound 
        // in that domin that are describe in that cross doamin
        SoundMixer.stopAll();
        // play the new sound.
        channel = snds.play();
        channel.addEventListener(Event.SOUND_COMPLETE, soundcomplete);
    }
    /** call when the new sound is play without stop old sounds**/
    public function playAllSound():void{
        // play the new sound.
        channel = snds.play();
        }
        private function soundcomplete(e:Event):void{
            Alert.show('<<<< complete >>>>>>');
        }
    }
}

и здесь мы используем функцию, которая передает звук obj как параметр в класс, а затем вызывает метод воспроизведения звука для воспроизведения звука.

//tahir - play the sound (close all previous sound and play new one)
private var soundPlayer:SoundPlayback = new SoundPlayback();
private function welcomePackage():void{

 soundPlayer.snds = loaderQueue.getSound('CV-welcome'+randomNumber(1,3));
 soundPlayer.playSound();

}

Спасибо.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2011

Вы можете создать функцию в main.mxml как:

public function soundDone():void{
    Alert.show('<<<< complete >>>>>>');
}

, а затем изменить soundcomplete() функцию

private function soundcomplete(e:Event):void{
    parentApplication.soundDone();
}
0 голосов
/ 24 февраля 2011

после некоторых исследований по моей проблеме я нашел ответ

То есть вы вызываете основное приложение из любого компонента mxml, но в случае AS3 оно недопустимо.

Я просто сделал класс канала открытым и написал функцию слушателя в моем main.mxml.

Спасибо.

0 голосов
/ 24 февраля 2011

Самый простой способ сделать это - отправлять и прослушивать пользовательские события. Вы можете узнать больше здесь . Но, по сути, вы создаете прослушиватель событий в своем основном классе и отправляете пользовательское событие из вашего звукового проигрывателя.

Надеюсь, это поможет.

...