我正在使用Flash CS6中的代碼段來執行我的移動Air應用程序。我如何正確刪除偵聽器? (我得到錯誤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);
}
有幾件事:this:naturepage.sliders.ocean_slider不是最好的方法。你不應該以這種方式鑽入對象......你的代碼添加和刪除是好的,否則我的猜測是當你試圖添加偵聽器的時候沒有創建對象ocean_slider ......或者它在嘗試刪除偵聽器之前已被刪除。我會將所有代碼移動到滑塊對象中,以便ocean_slider的偵聽器處於ocean_slider範圍內,並等待ocean_slider添加到stage或創建完成事件,然後向其添加enterframe偵聽器。 –
也不命名函數和對象相同的名稱(ocean_slider),因爲這是一個肯定的方式來犯錯誤和快速生成錯誤 –