当我添加一个EVENT.ACTIVATE
监听器到我的项目中,然后alt-tab离开并返回到我的项目时,它会触发两次。为什么我的EVENT.ACTIVE触发两次?
编辑:shaunhusain和我似乎已经找到了问题的原因,虽然没有解决方案。当运行独立播放器版本11+时,事件触发2倍。当在浏览器中运行独立播放器版本<或任何版本时,它会触发1x。所以看起来在最近版本的Flash Player投影机中可能存在一个错误。我将确定具体的版本,并将其报告给adobe,看看会发生什么。感谢任何阅读此内容并试图帮助的人!
我想让它在每次改变焦点时发射,我只是不想让它在每次改变焦点时都发射两次。
这是为什么?难道我做错了什么?什么是防止这种行为的最好方法?
看起来这将是一个常见问题,但谷歌什么也没有。
代码:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
stage.addEventListener(Event.ACTIVATE, test);
}
private function test(e:Event):void
{
trace(e.target);
}
}
}
实际结果:
[object Stage]
[object Stage]
期望的结果:
[object Stage]
它似乎并不有所作为是否我的监听器添加到舞台或其他任何事情,行为是一样的。
EVENT.DEACTIVATE也会发生同样的情况。其他如鼠标上的工作正常。
我的目标是暂停EVENT.DEACTIVATE
上的游戏并在EVENT.ACTIVATE
上取消暂停游戏。问题是,当事件触发两次时,它将两次调用非暂停函数,这会产生不必要的后果。
请添加更多关于您正在构建/运行的上下文的信息。我刚刚在FlashBuilder中创建了一个AS3项目,告诉它使用4.6 SDK作为AIR应用程序运行,并且无法重现,也尝试了Web 4.5 SDK的应用程序也无法重现,在这两种情况下,我都可以得到预期的结果。 – shaunhusain
http://www.shaunhusain.com/CheckActiveEventWeb/ http://www.shaunhusain.com/CheckActiveEventWeb/srcview – shaunhusain
确实很奇怪!感谢您的尝试。我使用Flex 4.6.0的FlashDevelop 4.0.0 Beta R1978。我无法访问FlashBuilder,但会询问flashdevelop论坛。与此同时,如果任何人有flashdevelop,如果你可以尝试重现结果,那将是非常棒的。 – WgFunstorm