2012-11-30 94 views
1

我正在使用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); 
} 
+0

有幾件事:this:naturepage.sliders.ocean_slider不是最好的方法。你不應該以這種方式鑽入對象......你的代碼添加和刪除是好的,否則我的猜測是當你試圖添加偵聽器的時候沒有創建對象ocean_slider ......或者它在嘗試刪除偵聽器之前已被刪除。我會將所有代碼移動到滑塊對象中,以便ocean_slider的偵聽器處於ocean_slider範圍內,並等待ocean_slider添加到stage或創建完成事件,然後向其添加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我剛剛編輯我的帖子。我仍然在學習如何使用計算器發佈方法。如果我發佈錯誤,請原諒我。 – akhunaton

+0

額外支架關閉函數fl_Activate(event:Event):void – akhunaton