2013-08-01 4 views
0

3 개의 버튼이 있으며 재생, 일시 중지 및 다음이 있습니다. 재생 버튼을 클릭하면 함수가 호출됩니다 (장시간 실행). 코드가 멈출 수 있도록 "일시 중지"버튼을 클릭하고 싶습니다. 다음 번에 "재생"을 클릭하고 싶을 때, 내가 멈춘 곳에서 계속하고 싶습니다.
또한 "다음"단추가 코드의 다음 줄을 실행 한 다음 일시 중지하기를 원합니다. 처음에는

은 내가 버튼으로 기능을 중지하려고하지만 난 붙어
플래시가 일시 중지 된 알고리즘

var nrs,nrst:int; 
nrs=1; 
nrst=0; 
import flash.events.MouseEvent; 
butt.addEventListener(MouseEvent.CLICK, cont); 
qwe.addEventListener(MouseEvent.CLICK, conts); 

function chs():Boolean 
{ 
    if (nrs==1) return true; else return false; 
} 

function cont(event:MouseEvent):void 
{ 

    while (chs()==true) 
    { 
     nrst++; 
     nrst=nrst%1234; 
     str.text=nrst.toString(); 
    } 
} 
function conts (event:MouseEvent):void 
{ 
    nrs=0; 
} 
+0

예, 코드를 한 행씩 실행하려면 디버거를 사용하십시오. – Vesper

답변

1

트릭은, srop 과정에 당신을 위해 자체에서 시작 - 정지 모드에서 작동합니다 함수 실행. 이는 Flash 이벤트 엔진이 이벤트 리스너가 실제로 다른 이벤트가 시작되기 전에 종료해야하기 때문입니다. 필자는 다음과 같은 접근 방식으로이를 해결했습니다. 엔터 프레임 리스너를 만들려면 하나의주기를 함수 내에서 실행하십시오 (주기 사이에 사용할 수있는 로컬 변수가 없는지 확인하십시오!). 리스너를 종료하십시오. 실행될 때마다이주기가 업데이트 될 수 있도록 변수 집합을 만드십시오 (가장 좋지만 성능 친화적이지는 않습니다). 사용자가 시도한 것처럼 글로벌 var/function을 통해 제어주기를 실행하거나 리스너 자체를 추가/제거합니다. 실수로 두 명의 청취자를 추가하고 프로세스를 망칠 수 있기 때문에 전역 플래그가 더 좋습니다. 단순한 경우 구조는 다음과 같습니다.

butt.addEventListener(MouseEvent.CLICK, conts2); 
qwe.addEventListener(MouseEvent.CLICK, conts); 
this.addEventListener(Event.ENTER_FRAME,cont); 

function chs():Boolean 
{ 
    if (nrs==1) return true; else return false; 
} 

function cont(event:Event):void 
{ 
    if (chs()) // IF, not WHILE, so that events could still be parsed 
    { 
     nrst++; 
     nrst=nrst%1234; 
     str.text=nrst.toString(); 
    } 
} 
function conts (event:MouseEvent):void 
{ 
    nrs=0; 
} 
function conts2(e:MouseEvent):void { 
    nrs=1; 
} 
관련 문제