actionScript3 ENTER_FRAME事件无效

时间:2015-01-12 06:56:56

标签: actionscript-3 flash actionscript

我试图在播放音频时使用ENTER_FRAME事件,但代码没有执行处理函数。

public function play_mp3(path:String,path1:String):void {
    var snd:Sound = new Sound();
    snd.load(new URLRequest(path), new SoundLoaderContext());
    channel = snd.play();
    addEventListener(Event.ENTER_FRAME,myFunction);} 
 public function myFunction(e:Event){
  LogFB.info('test1234'); }

3 个答案:

答案 0 :(得分:3)

您的问题很可能是您发布的代码所在的类不在显示树上。 (它不是显示对象或者没有添加到舞台上)。

如果它不在显示树上,则ENTER_FRAME将不会在其上发送。

你可以通过几种方式解决这个问题。

  1. 将类中的内容(或舞台本身)引用到类中。然后在该对象上添加ENTER_FRAME侦听器。

    var stage:Stage;
    public function MyClass(stage_:Stage){
        stage = stage_;
    }
    
    ....
    stage.addEventListener(Event.ENTER_FRAME, myFunction);
    
  2. 放弃ENTER_FRAME,只需使用Timer

    var timer:Timer
    public function play_mp3(path:String,path1:String):void {
        var snd:Sound = new Sound();
        snd.load(new URLRequest(path), new SoundLoaderContext());
        channel = snd.play();
        timer = new Timer(250); //tick every quarter second
        timer.addEventListener(TimerEvent.TIMER, myFunction);
        timer.start();
    } 
    
    public function myFunction(e:Event){
      LogFB.info('test1234');
    }
    

答案 1 :(得分:-1)

您的问题出在LogFB中。
试试这个,你会看到函数内部的痕迹......

   var channel : SoundChannel = new SoundChannel();

function play_mp3(path:String,path1:String):void {
    var snd:Sound = new Sound();
    snd.load(new URLRequest(path), new SoundLoaderContext());
    channel = snd.play();
    addEventListener(Event.ENTER_FRAME,myFunction);
} 

function myFunction(e:Event){
    //LogFB.info('test1234'); here is the problem
   // trace("is working!");
    hi();
}

play_mp3('aasa','aaa');

function hi() {
    trace("goooooddddd!"); //is working, I am using Flash CC
}

一切顺利!

答案 2 :(得分:-1)

尝试这个似乎没有任何错误

public function play_mp3(path:String,path1:String):void {
 addEventListener(Event.ENTER_FRAME,myFunction);
    var snd:Sound = new Sound();
    snd.load(new URLRequest(path), new SoundLoaderContext());
    channel = snd.play();
   } 
 public function myFunction(e:Event){
  LogFB.info('test1234'); }

即将enterframe事件放在代码中的第一件事,以检查它是否至少初始化它?