新建一个项目,添加全屏操作,stage加入键盘监听,编译运行。
使用独立的flashplayer打开,正常
在IE7中打开含flash的页面,多次进行全屏操作,可以发现在全屏事件后,输出了空格的按键事件
在Firefox/3.0.7中测试,每次进入全屏后都会出现这种问题。
flashplayer版本均为最新:10.0.22.87
将版本降至10.0.12.36,问题依旧。
拿到示例到同事电脑上测试,Firefox和flash版本与上述版本相同,但未出现此现象。
被这个问题困扰半日,因为程序中要监听空格键,全屏后自动角触发空格键,扰乱程序执行了。
另外,进入全屏后(测试过目前常见的视频站的播放器),激活右键,会发现fps降到了1~2左右,电脑异常缓慢,右键菜单取消后,恢复正常。但同事电脑上也无此现象。
示例代码:
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
btn.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(event:MouseEvent):void
{
if (stage.displayState == StageDisplayState.NORMAL)
{
stage.displayState = StageDisplayState.FULL_SCREEN;
}
else
{
stage.displayState = StageDisplayState.NORMAL;
}
txt.appendText(“stage.displayState –> “+stage.displayState.toString()+”\n”);
txt.scrollV = txt.maxScrollV;
}
function keyUpHandler(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.SPACE)
{
txt.appendText(“你松开了空格\n”);
}
txt.scrollV = txt.maxScrollV;
}
function keyDownHandler(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.SPACE)
{
txt.appendText(“你按下了空格\n”);
}
txt.scrollV = txt.maxScrollV;
}
测试:Download
测试代码:Download
通过全屏后的100ms内禁用按键监听,也算是解决这个问题了

@abcppl:
对, 不会产生KeyboardEvent.KEY_UP事件
[Reply]
可以用KEY_UP代替
[Reply]
@abcppl:
嗯, 只能等BUG修复了, 或者使用适宜的延时处理
[Reply]
我也碰到这个问题了,头痛啊
[Reply]
事实上用延迟判断也还是有问题的
[/reply]
如果在产生这个 bug 的同时 Flash Player 还在处理性能开销很高的工作,比如播放高清视屏等,那么这个延迟阈值就会被延长。
[reply=auzn,2009-03-15 12:25 AM]对,这个数值现在已经被设定为500ms了
其实,我做的就是播放器的控制,你说得太准了
[Reply]
filed already
[/reply]
bugs.adobe.com/jira/browse/FP-814
[reply=auzn,2009-03-15 00:17 AM]Thank you.
“Created: 10/22/08 06:56 AM”
I know too late
[Reply]