AS3 - preventDefault()无法在全屏(AIR)中工作

时间:2014-11-24 21:22:37

标签: actionscript-3 flash air

我正在尝试在空中制作一个全屏程序,当你按下逃生时它不会变成窗口。为什么我的程序不能正常工作,应该如何使其正常工作?

代码:

package 
{
import flash.display.*;
import flash.events.*;
import flash.desktop.*;
import flash.text.*;

public class Main extends Sprite 
{

    public function Main():void 
    {
        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align = StageAlign.TOP_LEFT;
        stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandeler);

    }

    private function keyDownHandeler(e:KeyboardEvent):void
    {
        if (e.keyCode == 27) 
        {
            trace("Hello");
            e.preventDefault();
        }
    }
}

}

1 个答案:

答案 0 :(得分:2)

我使用以下文档类文件创建了一个针对AIR 14(也成功尝试过AIR 3.9)的新项目(FlashDevelop):

package 
{
    import flash.desktop.NativeApplication;
    import flash.display.NativeWindow;
    import flash.display.NativeWindowInitOptions;
    import flash.display.NativeWindowRenderMode;
    import flash.display.NativeWindowSystemChrome;
    import flash.display.Sprite;
    import flash.display.StageDisplayState;
    import flash.events.Event;
    import flash.events.FullScreenEvent;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.ui.Keyboard;

    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 
        {
            if(e) removeEventListener(Event.ADDED_TO_STAGE, init);

            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyUpHandler);

            var content:Sprite = new Sprite();
            content.graphics.beginFill(0xFFFF00);
            content.graphics.drawRect(0, 0, 400, 500);
            content.graphics.endFill();
            addChild(content);

            this.addEventListener(MouseEvent.CLICK, fullScreen);

            stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
        }

        private function fullScreen(e:Event):void {
            stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
        }

        protected function keyUpHandler(event:KeyboardEvent):void {
            switch(event.keyCode) {
                case Keyboard.ESCAPE:
                    trace("ESCAPE");
                    event.preventDefault();
                    break;

                default:
                    trace("UNHANDLED KEY: ", event.keyCode);
            }
        }


    }

}

它按预期工作。当遇到转义时,键事件上的preventDefault()方法成功地使应用程序保持全屏。

注意:
它必须在关键时刻。密钥没有影响。结果与stagenativeApplication上的键向下监听器相同。