Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 为什么不是';这不是接收KeyboardEvent.KEY\u DOWN事件吗?_Actionscript 3_Apache Flex_Actionscript_Flash_Keyboard Events - Fatal编程技术网

Actionscript 3 为什么不是';这不是接收KeyboardEvent.KEY\u DOWN事件吗?

Actionscript 3 为什么不是';这不是接收KeyboardEvent.KEY\u DOWN事件吗?,actionscript-3,apache-flex,actionscript,flash,keyboard-events,Actionscript 3,Apache Flex,Actionscript,Flash,Keyboard Events,基本上,我只是尝试在我的程序中添加键盘事件侦听器,然后开始迭代地构建它们。问题是,即使是从多个教程中获得最简单的东西,显然也是一个问题。我不太确定我现在错过了什么。我试过添加东西、更改东西和取出东西。但是根据下面的代码,我看不到任何消息显示在屏幕上。为什么? <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:local="*" xmlns:mx="http://www.adobe.com/2006/mxml

基本上,我只是尝试在我的程序中添加键盘事件侦听器,然后开始迭代地构建它们。问题是,即使是从多个教程中获得最简单的东西,显然也是一个问题。我不太确定我现在错过了什么。我试过添加东西、更改东西和取出东西。但是根据下面的代码,我看不到任何消息显示在屏幕上。为什么?

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:local="*" xmlns:mx="http://www.adobe.com/2006/mxml" width="480" height="600" layout="absolute" creationComplete="onCreationComplete()">
<mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import flash.events.KeyboardEvent;

        private function onStart(pEvent:Event):void {
            vs.selectedChild = mm;
        }

        private function onNewGame(pEvent:Event):void {
            vs.selectedChild = game;
        }



        private function onCreationComplete():void {
            addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

            addEventListener(KeyboardEvent.KEY_UP, onKeyDown);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyDown);
        }

        private function onKeyDown(pEvent:KeyboardEvent):void {
            Alert.show("spam");
            Alert.show(pEvent.toString());
        }
    ]]>
</mx:Script>
<mx:ViewStack id="vs" creationComplete="vs.selectedChild = ts">
    <local:TitleScreen id="ts" creationComplete="ts.addEventListener(TitleScreen.START, onStart);" />
    <local:MainMenu id="mm" creationComplete="mm.addEventListener(MainMenu.NEW_GAME, onNewGame);" />
    <local:Game id="game" />
</mx:ViewStack>
</mx:Application>

您不能直接使用
stage
。而是使用以下代码:

    private function onCreationComplete():void {
        systemManager.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
        systemManager.stage.addEventListener(KeyboardEvent.KEY_UP, onKeyDown);
    }

谢谢你,伊万!这就成功了。不过我有几个问题要问:#1。我刚才看到一些文档说stage不能直接访问,必须从DisplayObject访问。mx:Canvas和mx:Application都继承了它。是什么阻止我直接从其中一个内部访问它#2:有没有一种方法可以对不同的基于mx:Canvas的MXML类执行此操作,并使用不同的事件侦听器,而不必将其放入主mx:Application中?@Panzercrisis非常确定您可以直接收听舞台。您只需在添加到未完成创建的\u阶段事件之后执行此操作。systemManager类可能只是在控制它。