2012-11-30 2 views
1

모바일 에어 앱용으로 Flash Cs6의 코드 스 니펫을 사용하고 있습니다. 청취자를 올바르게 제거하려면 어떻게합니까? (나는 오류 1120 : 정의되지 않은 속성 ocean_slider의 액세스.) 다음 코드와 함께. 당신의 도움을 주셔서 감사합니다.이벤트 비활성화/활성화 - AS3에서 이벤트 리스너 제거

/* Deactivate/Activate Event 
Conserve CPU and battery life by suspending expensive processes, such as ENTER_FRAME  and TIMER events, when the application is not in focus. 

Instructions: 
1. Start timers and add event listeners in "fl_Activate". 
2. Stop timers and remove event listeners in "fl_Deactivate". 
*/ 

stage.addEventListener(Event.ACTIVATE, fl_Activate); 
stage.addEventListener(Event.DEACTIVATE, fl_Deactivate); 

function fl_Activate(event:Event):void 
{ 
// Start timers and add event listeners here. 

naturepage.sliders.ocean_slider.addEventListener(Event.ENTER_FRAME, ocean_slider); 

function ocean_slider(e:Event):void 
{ 
    ocean_transform.volume = (naturepage.sliders.ocean_slider.value/100); 
    ocean_channel.soundTransform = ocean_transform; 

} 
} 

function fl_Deactivate(event:Event):void 
{ 
// Stop timers and remove event listeners here. 
naturepage.sliders.ocean_slider.removeEventListener(Event.ENTER_FRAME, ocean_slider); 

} 

확인. 방금 코드를 다음과 같이 변경했지만 여전히 문제가 있습니다. removeEventListener없이 게시 한 후 함수가 내 응용 프로그램에서 작동하기 때문에 리스너가 확실히 추가되고 있습니다. 그러나 리스너를 제거하는 코드를 추가하면 퍼블리시하려고 할 때 오류 1120이 발생합니다.

stage.addEventListener(Event.ACTIVATE, fl_Activate); 
stage.addEventListener(Event.DEACTIVATE, fl_Deactivate); 

function fl_Activate(event:Event):void 
{ 

addEventListener(Event.ENTER_FRAME,myFunction); 
function myFunction(event:Event):void 
{ 
ocean_transform.volume = (naturepage.sliders.ocean_slider.value/100); 
ocean_channel.soundTransform = ocean_transform; 
} 
} 

function fl_Deactivate(event:Event):void 
{ 
removeEventListener(Event.ENTER_FRAME,myFunction); 
} 
+0

몇 가지 : this : naturepage.sliders.ocean_slider는 최선의 방법이 아닙니다. 그런 식으로 객체를 드릴해서는 안됩니다. 추가하고 제거하는 코드는 괜찮습니다. 그렇지 않으면 리스너를 추가하려고하는 순간 ocean_slider 객체가 생성되지 않았을 것입니다. 또는 리스너를 제거하기 전에 제거되었습니다. 이 모든 코드를 슬라이더 객체로 이동하여 ocean_slider의 리스너가 ocean_slider의 범위에 있고 ocean_slider의 스테이지 또는 작성 완료 이벤트를 기다린 다음 enterframe 리스너를 추가합니다. –

+0

또한 함수의 이름을 지정하지 않습니다. 객체는 같은 이름 (ocean_slider)이므로 실수를하고 오류를 빠르게 생성하는 확실한 방법입니다 –

답변

0

확인. 나는 그것이 지금 일하고 있다고 생각한다. 나는이 모든 기능을 외부에 두었다. 도와 주셔서 감사합니다.

function myFunction(event:Event):void 
{ 
ocean_transform.volume = (naturepage.sliders.ocean_slider.value/100); 
ocean_channel.soundTransform = ocean_transform; 
} 

stage.addEventListener(Event.ACTIVATE, fl_Activate); 
stage.addEventListener(Event.DEACTIVATE, fl_Deactivate); 

function fl_Activate(event:Event):void 
{ 
addEventListener(Event.ENTER_FRAME,myFunction); 
} 

function fl_Deactivate(event:Event):void 
{ 
removeEventListener(Event.ENTER_FRAME,myFunction); 
} 
0

대괄호가 꺼져있는 것 같습니다. 복사 한 코드와 붙여 넣은 코드 또는 실행하려는 코드입니다. 대괄호가 그 모양 인 이유를 확인한 후 코드를 편집합니다. 특히 ocean_slider 함수의 2 '}'를 사용하십시오.

아무튼, ocean_slider를 사용할 수 없으며 추가되지 않았습니다. 단계. 그래서 있다면, 준비가되기 전에 fl_Deactivate를 호출하지 않았는지 확인해야합니다. 그리고 함수 호출과 동일한 이름의 스테이지 항목도 있습니다. - ocean_slider - 변경하고 작동하는지 확인합니다.

+0

아직 행운이 있습니까? – Gone3d

+0

@ Jason Reeves 방금 내 글을 편집했습니다. 나는 아직도 stackoverflow 게시 방법을 사용하는 법을 배우고있다. 내가 잘못 게시하면 용서해주십시오. – akhunaton

+0

그 여분의 대괄호가 함수를 닫습니다. fl_Activate (event : Event) : void – akhunaton