【发布时间】:2012-03-02 04:52:58
【问题描述】:
我正在开发一个用 Actionscript 3 和 MXML 实现的 Flex 3 应用程序,其中包括一个嵌入式视频播放器,它本质上是一个黑盒子——我根据需要从另一个站点将它作为 SWF 加载,但我没有'无权访问其源代码。但是,它确实继承自 Sprite。
问题在于,当焦点位于 Flash 应用程序上时,视频播放器会以某种方式接收和处理键盘事件,即使播放器本身不在焦点上也是如此。因此,当用户在 GUI 的其他位置输入文本时,如果他们按下空格键,视频就会暂停。
我尝试在 Sprite 的父项中拦截关键事件,并在 Sprite 上设置 tabEnabled = false、tabChildren = false 和 buttonMode = false,但似乎没有任何效果。就好像 Sprite 通过备用事件路径获得击键一样。
有没有人对我可以如何阻止玩家完全接收键盘事件或输入事件有任何想法?如果没有输入事件到达播放器,这对我来说很好,因为我已经实现了自己的独立视频控件。
【问题讨论】:
-
“尝试在 Sprite 的父级中拦截关键事件”,您的意思是 useCapture 设置为 true 的事件侦听器吗?
-
在黑暗中拍摄,可能无法解决问题,但至少可以尝试另一件事,
yourPlayer.focusRect = false; -
关于@wvxvw 的评论,如果是这种情况,您可以通过为keyUp 添加监听器来停止输入框中的事件传播,然后调用event.stopImmediatePropagation() 来停止事件冒泡到舞台(您需要对所有输入都执行此操作,这显然不理想,但它可能会起作用)。您也可以尝试在舞台上为 keyUp 设置一个具有最高优先级的侦听器,并希望它会在播放器注册的侦听器之前被调用,然后遵循相同的停止传播方法。
标签: flash actionscript-3 apache-flex events mxml