2015-01-12 2 views
0

오디오 재생시 ENTER_FRAME 이벤트를 사용하려고하지만 코드가 처리기 기능을 실행하지 않습니다.actionScript3 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'); } 
+0

경우이 코드가 위치한 바로 사용할 수 있습니까? 'ENTER_FRAME'은 프레임에 현재 그려져있는 표시 객체에서만 작동합니다. 즉, 표시 목록에 있어야합니다. 본질적으로 이는 DisplayObject만이 'ENTER_FRAME' 이벤트를 사용할 수 있음을 의미합니다. 비 DisplayObject 클래스에서이 문제를 해결하려면 간단한 변수 (예 : Sprite, MovieClip, Shape)를 클래스 외부의 표시 목록에 추가하고 이벤트 리스너를 변수에 추가 할 수 있습니다. – DodgerThud

+0

안녕하세요 DodgerThud, 저는 이것이 비 표시 객체라고 생각하며 위의 varables (Sprite, MovieClip, Shape 등)를 이미 만들었습니다. 내 주요 문제는 재생되는 mp3의 재생 된 부분의 백분율과 그 위에 추가 및 이벤트를 계산하는 것입니다. 이 문제를 도와 주시면 감사하겠습니다. –

+0

이 코드는 어디에 있습니까? 이것을'play_mp3' 메쏘드에 넣으려고한다면 :'LogFB.info ('stage :'+ stage);'무대 객체 나 null을 얻나요? 후자의 경우 문제는 DodgerThud가 제시 한 것처럼 해당 클래스의 컨텍스트가 표시 트리에 없으므로 ENTER_FRAME이 전달되지 않습니다. – BadFeelingAboutThis

답변

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'); 
    } 
    
+0

안녕하세요, (Forgo ENTER_FRAME, 타이머 만 사용) 나를 위해 일했습니다. 정말 고마워요. 하나의 작은 문제가 여기 있습니다. 오디오 재생 후 myfunction을 50 %까지 호출하고 싶습니다. 오디오의 총 길이는 있지만 새 타이머 (totallength/2)는 정확하게 작동하지 않습니다. 오디오가 여전히로드되어 있기 때문에 want.i라고 생각하십시오. –

+0

'snd.bytesLoaded BadFeelingAboutThis

-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 
} 

모든 최선을이 시도하고 당신은 함수 내부에서 추적을 볼 것이다!

+0

나는 그렇게 생각하지 않는다. 추적을 떠나서 myFunction()에서 다른 함수 test()를 호출하면 어떻게 될까? 그리고 Intellij Idea IDE를 사용하고 있습니다. 브라우저에서 트레이스가 작동하지 않습니다. LogFb.info는 프로그램의 모든 곳에서 작동합니다. –

-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 이벤트를 적어도 그것을 초기화 있는지 확인하는 코드에서 hapen 제일 먼저 시도가 같지 않습니다?

+0

아니요 작동하지 않았습니다. 실제로이 이벤트 (Event.ENTER_FRAME)는 클래스의 어느 곳에서나 작동하지 않습니다. –

+0

이벤트 입력 프레임 이벤트를 가져 왔습니까? –

+0

flash.event.Event, 예 –

관련 문제