About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Feb

    11

    AS3 版 Key.isDown()

    • 0 Comments
    • Flash Platform

    在 AS3 中重现 AS1/2 时代做游戏常用的方法:

    package {
     
     import flash.display.Stage;
     import flash.events.Event;
     import flash.events.KeyboardEvent;
     
     /**
      * 用法:
      * Key.initialize(stage);
      * if (Key.isDown(Keyboard.LEFT)) {
      *    // 左键被按下
      * }
      */

     public class Key {
      private static var initialized:Boolean = false; 
      private static var keysDown:Object;  
      public static function initialize(stage:Stage) {   
       if (!initialized) {    
        keysDown = new Object();    
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
        stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);    
        initialized = true;    
       }
      }  
      public static function isDown(keyCode:uint):Boolean {   
       if (!initialized) {
        throw new Error("Key class has yet been initialized.");
       }
       return Boolean(keyCode in keysDown);
      }  
      public static function deconstruct(stage:Stage):void {   
       stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
       stage.removeEventListener(KeyboardEvent.KEY_UP, keyReleased);   
       initialized = false;
      }  
      private static function keyPressed(event:KeyboardEvent):void {
       keysDown[event.keyCode] = true;
      }  
      private static function keyReleased(event:KeyboardEvent):void {
       if (event.keyCode in keysDown) {
        delete keysDown[event.keyCode];
       }
      }  
     }
    }

    Mar

    12

     在 Adobe AIR 运行时环境中,Window 是 AIR 桌面应用程序中其它窗口的顶级容器,它除了最大化窗口功能(maximize())外,还可以使用全屏功能(StageDisplayState.FULL_SCREEN_INTERACTIVE)。但在全屏功能中它有一个“小陷井”,在某些情况下,如果按了ESC键或CTRL+S键这后,它有可能会退出全屏模式,甚至还会让窗口变的只剩两个滚动条(这应该是 Adobe AIR Window 留下的Bug)。不过可以通过对舞台(stage)实例添加全局的键盘事件(KeyboardEvent.KEY_DOWN)来屏蔽这情况:

    if(e.keyCode == Keyboard.ESCAPE)
    e.preventDefault();
    if(e.keyCode == 83 && e.ctrlKey)
    e.preventDefault()

    More...