【问题标题】:Flex 3: Key press combination to trigger an event/functionFlex 3:按键组合触发事件/功能
【发布时间】:2011-09-06 08:30:36
【问题描述】:

在特定的画布中,我希望用户能够按下将触发事件的组合键。(有点像旧的巨型游戏中的作弊)。不知道从哪里开始。任何人都知道这是否可能,如果可以,你能给我一个如何开始的线索吗?

提前致谢!

【问题讨论】:

    标签: apache-flex flex3 keyboard keypress combinations


    【解决方案1】:

    可以KeyboardEvent.KEY_DOWN 事件添加一个eventListener 到顶级应用程序并检查那里的组合键。来自this article

    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
     layout="absolute" creationComplete="init()">
     <mx:Script>
     <![CDATA[
        private function init():void{
         this.addEventListener(MouseEvent.CLICK, clickHandler);
         this.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed);
        }
        private function clickHandler(event:MouseEvent):void {
          stage.focus = this;
        }
        private function keyPressed(evt:KeyboardEvent):void{
           if(evt.ctrlKey && evt.keyCode == 65)
                 trace("CTRL A is pressed");
           if(evt.ctrlKey && evt.keyCode == 66)
                 trace("CTRL B is pressed");
       }
     ]]>
     </mx:Script>
    </mx:Application>
    

    【讨论】:

    • 太棒了,我可以从这里好好尝试一下。也感谢您的链接。
    • 这是真的;但是,正如我在自己的回答中所说,仍然需要调度键盘事件;而我的容器不这样做。
    • @www.Flextras.com 是的。我只是不喜欢仅仅为了调度 KEY_UP 或 KEY_DOWN 事件而将焦点放在隐藏组件上。在我看来,任何使光标或焦点脱离用户控制或依赖于某些任意隐藏控件中的焦点的东西都不是好的设计。
    • 没有参数。我没有注意到您直接引用了舞台。我不知道舞台会发送键盘事件[它只是出现在另一个问题中]。不过,我本来希望应用程序成为舞台的孩子,而不是相反。是非要直接听舞台,还是可以应用级听;和你一样吗?
    【解决方案2】:

    画布不会调度按键向上或按键向下事件。你可以为它们添加一个监听器;因为关键事件会冒泡;但它不会单独派遣他们。不幸的是,输入组件(例如 textInput)需要获得焦点才能调度按键事件。

    我不使用画布、组或其​​他容器,而是考虑使用带有自定义外观的Spark TextInput,使其和键入的文本基本上不可见。

    【讨论】:

    • 唯一的问题是我使用的是不支持 spark 组件的 flex3。无论如何感谢您的建议!
    • @Michael Wilson 您可以设置 MX TextInput 的样式来做同样的事情,我只是觉得这样做很难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多