Вызов функции во флеш-объекте работает только внутри - PullRequest
0 голосов
/ 14 октября 2011

Я использую пакет для воспроизведения файлов .wav во Flash. Я могу воспроизвести wav, однако я не могу запустить их с помощью кнопки. Я подозреваю, что это потому, что я неправильно понял это ключевое слово. Ниже приведен пример.

Вы можете видеть, что когда я вызываю playBackTest () напрямую, это работает; когда я вызываю этот объект с кнопки, это не так.

Любые предложения будут очень признательны.

package  
 {  
    import flash.display.Sprite;  
    import flash.net.URLLoader;  
    import flash.net.URLRequest;  
    import flash.events.Event;  
    import flash.utils.ByteArray;  
    import org.as3wavsound.WavSound;  
    import org.as3wavsound.WavSoundChannel;
    import org.as3wavsound.WavSoundPlayer;
    import flash.display.*; 
    import flash.text.TextField;
    import flash.events.ProgressEvent;

     public final class PlaySound extends MovieClip  
     {  
        var tts:WavSound;
        var soundUrl:String;
        var soundType:String;
        var statusTextField:TextField  = new TextField();
        var WavChannel:WavSoundChannel; 
        var statusMC:MovieClip;
        var totalRemainingLoad:int = 0;

        public function PlaySound(soundUrl:String, repeats:String, volumeLevel:Number, statusMC):void {  

            //set variables of this object when it's initiated 
            this.soundUrl = soundUrl;
            this.statusMC = statusMC;
            loadWav();      
        }

        public function loadWav() { 
            var urlRequest:URLRequest = new URLRequest(soundUrl); 
            var wav:URLLoader = new URLLoader();  
            wav.dataFormat = 'binary';  
            wav.load(urlRequest);
            wav.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            this.statusMC.addChild(statusTextField);            
            wav.addEventListener(Event.COMPLETE, makeWav);  
        }

        private function progressHandler(event:ProgressEvent):void {
            var loadTime:Number = event.bytesLoaded / event.bytesTotal;
            var LoadPercent:uint = Math.round(100 * loadTime);
            statusTextField.text =  LoadPercent + ' % loaded ';
        }       

        public function makeWav(e:Event) {  
            this.tts = new WavSound(e.target.data as ByteArray);
            playBackTest();
        }

        public function playBackTest() {
            trace('This makes audio play'); 
            this.tts.play(); 
        }       

        public function playBack() {
            trace('This does not if called from outside with a button press'); 
            this.tts.play(); 
        }   


    }  
}  

1 Ответ

0 голосов
/ 14 октября 2011
public function PlaySound():void 
{  
     if(stage) init();
     else      addEventListener(Event.ADDED_TO_STAGE, init);    
}

private function init(e:Event=null):void
{
     removeEventListener(Event.ADDED_TO_STAGE, init);
     loadWav();
}

Ваш класс является наследником MovieClip, поэтому PlaySoundClass должен быть добавленной стадией. Если ваш класс не совсем добавлен ToStage. не доступно Класс.

ваше внутреннее изменение var на Public var или метод get / setter. потому что должен быть доступ к в.

и получите доступ к вашему классу, следуя кодам.

var mySound:PlaySound = new PlaySound(); 
mySound.soundUrl = "your URL"; 
mySound.repeats = "your Repeats"; 
mySound.volumeLevel = volumeLevel; 
mySound.statusMc= your MovieClip;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...