2010-05-13 3 views
0

다른 함수를 사용하여 이벤트를 캡처 (무언가 다운로드) 한 후 원래 함수로 되돌려 야합니다. 원래 함수는 다운로드 한 데이터에 따라 값을 반환해야합니다. 그래서, 나는 다운로드에 필요한 시간 동안 원래 기능을 멈추고 작업을 완료하기 위해 eventhandler 기능을 원하고 나중에 다시 시작하고 싶습니다.Actionscript : 이벤트 처리기 함수에서 이전 함수로 전환

확실한 방법은 깃발 값을 설정하는 것입니다 (원래 함수와 이벤트 핸들러는 같은 클래스 내에 있습니다). 그리고 이벤트 핸들러 함수가 플래그를 변경할 때까지 원래 함수가이를 확인하게하십시오. 그러나 그것은 낭비적이고 내 AS는 이미 충분히 느리다. :) [응용 프로그램의 다른 부분은 무거운 그래픽을 사용한다].

다른 방법이 있습니까? 함수의 "중간에"캡처 된 이벤트와 마찬가지로? 또는 다른 형태의 흐름 제어?

답변

0

그것은 다음과 같이 작동하지 않습니다. 다른 곳에서 끝내기를 기다리는 코드를 그냥 넣을 수는 없습니다. Actionscript 실행은 단일 스레드입니다. 당신은 jdeseno에 의해 제안 된대로 할 필요가 여러 함수로 나눕니다.

+0

그건 내 명확한 답변입니다. 이미 분할을했는데, 조금 더 코딩 (새로운 이벤트 하위 클래스와 종속성의 몇 가지 변경 사항)하지만 작동합니다. 아직도 AS3에 익숙해지고 있습니다. 너와 j.deseno에게 감사 드린다. –

2

당신은 당신의 이벤트가 시작 후 코드의 나머지 부분을 다시 콜백으로 이벤트 핸들러 기다리고 기능을 분리해야합니다 :

public function non_blocking():void { 
    // code that needs to run before the event here] 

    var callback:Function = function(e:Event):void { 
     // test return type here 
     // ... continue with the rest of your code 
    }; 

    addEventListener(YOUR_EVENT_TYPE, callback); 
} 
+0

문제는, 뭔가를 반환하는 non_blocking() 함수가 필요하며 콜백에 따라 다릅니다. non_blocking은 객체의 외부 인터페이스의 일부이며 객체를 호출하는 다른 클래스는 객체가 유효한지 여부를 알기 위해 반환이 필요합니다. 이는 생성자 다음에 호출 할로드 함수의 일종입니다. 객체가 데이터를 보유하고 있지 않다면 사용해서는 안됩니다.) 그러나 외부에서 호출되는 함수가 종료되면 콜백은 다른 이벤트를 시작하는 것 외에도 호출 한 외부 클래스와 통신 할 수 없습니다. 하지만 그건 내 디자인을 망칠거야. –

+0

음 ... 다른 한편으로, 다른 이벤트를 시작하는 것은 URLLoader가 작동하는 방식이며, 작동합니다. :) 어쩌면 그 변화가 그렇게 심하지 않을 수도 있습니다 ... 한편, 다른 방법이 있습니까? –

+0

내가보기에 콜백이있는 곳 대신 (또는 안쪽에) 호출 될 호출 함수에서 연속을 전달해야하는 것처럼 들립니다. 이벤트가 끝나면 실행을 다시 시작하고 다시 시작하는 메커니즘이 필요합니다. – jdeseno