2011-08-28 2 views
0

Вот мой ActionScript (скомпилирован с mxmlc, встроенный в HTML, а функции вызываются с JS):ошибка доступа к переменным класса в пределах ExternalInterface обратного вызова

package { 
    import flash.display.Sprite; 
    import flash.external.ExternalInterface; 
    import flash.media.Sound; 
    import flash.media.SoundChannel; 
    import flash.net.URLRequest; 

    public class LyrePlayer extends Sprite { 
     private var out:SoundChannel; 
     private var player:Sound; 

     public function LyrePlayer() { 
      out = new SoundChannel(); 
      player = new Sound(); 
      ExternalInterface.addCallback("play", play); 
      ExternalInterface.addCallback("stop", stop); 
     } 

     private function play(url:String):void { 
      var request:URLRequest = new URLRequest(url); 
      player.load(request); 
      if(out.position != 0) out.stop(); 
      out = player.play(); 
     } 

     private function stop():void { 
      out.stop(); 
     } 
    } 
} 

Это все работает, вроде. Я могу воспроизвести один файл и позвонить по телефону stop() любое количество раз. Но если я называю play() во второй раз, он выдает ошибку:

> flashObject.play("/static/test.mp3") 
[the song plays] 
> flashObject.stop() 
[the song stops] 
> flashObject.play("/static/test.mp3") 
Error 
arguments: undefined 
message: "Error calling method on NPObject." 
> flashObject.stop() 
[no error] 

Любые идеи?

+0

Я точно не знаю, что вы просите, но если вы имеете в виду, что если вы удалите // из строки out.stop() в вы получаете ошибку, не будет ли это инициировать ошибку при первом вызове воспроизведения, так как переменная out еще не установлена ​​в экземпляр SoundChannel? –

+0

Я исправил это и уточнил свой вопрос. Благодарю. – colinmarc

+0

Попробуйте изменить имена обратного вызова ExternalInterface, вместо этого используйте lyrePlay, если вы играете. –

ответ

Смежные вопросы