当我EVENT.ACTIVATE
向我的项目添加一个监听器,然后alt-tab离开并回到我的项目时,它会触发两次.
编辑:shaunhusain我似乎找到了问题的原因,虽然没有解决方案.当运行独立播放器版本11+时,事件触发2x.当运行独立播放器版本<11或浏览器中的任何版本时,它会触发1x.因此,最近版本的Flash播放器投影机可能存在错误.我要确定准确的版本并将其报告给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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
实际结果:
[object Stage]
[object Stage]
Run Code Online (Sandbox Code Playgroud)
期望的结果:
[object Stage]
Run Code Online (Sandbox Code Playgroud)
我是否将监听器添加到舞台或其他任何东西似乎没有区别,行为是相同的.
EVENT.DEACTIVATE也会发生同样的事情.其他如鼠标工作正常.
我的目标是暂停游戏EVENT.DEACTIVATE
并取消暂停EVENT.ACTIVATE
.问题是当事件触发两次时,它会调用两次unause函数,这会产生不必要的后果.
ActionScript\xc2\xae 3.0 Reference for the Adobe\xc2\xae Flash\xc2\xae Platform 介绍了此事件:
\n\n\n\n\n当 Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时调度。此事件是广播事件,\n 这意味着它由所有注册了此事件的侦听器的 EventDispatcher 对象调度。有关广播事件的详细信息,请参阅 DisplayObject 类。
\n
对我来说,您似乎想阻止其设计的行为?我想它的设计目的是在每次你改变焦点时触发,还是我错了?你想要完成什么?然而,这是一个答案,因此根据您所写的内容 - 您可以通过在侦听器触发一次后删除侦听器来解决此问题:
\n\n private function test(e:Event):void\n {\n stage.removeEventListener(Event.ACTIVATE, test);\n\n trace(e.target);\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n但我建议您多写一些关于为什么使用它以及如果这不令人满意的话想要完成什么的内容。
\n 归档时间: |
|
查看次数: |
1918 次 |
最近记录: |