在停用/激活事件中删除事件侦听器 - AS3

时间:2012-11-30 02:11:21

标签: actionscript-3 flash air

我正在使用Flash Cs6中的代码段作为我的移动Air应用。如何正确删除监听器? (我得到错误1120:未定义属性ocean_slider的访问。)使用以下代码。谢谢你的帮助。

/* 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);
}

2 个答案:

答案 0 :(得分:0)

看起来您的括号已关闭 - 您复制和粘贴的代码或您尝试运行的代码。在确认为什么括号是它们的方式之后我会编辑代码 - 特别是在ocean_slider函数中的2'}'

无论如何,这意味着ocean_slider不可用且尚未添加到舞台中。所以,如果有,你需要检查以确保在事情准备好之前你没有调用fl_Deactivate。你还有一个函数调用和具有相同名称的stage项 - ocean_slider - 我会更改它并查看它是否有效。

答案 1 :(得分: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);
}