zoukankan      html  css  js  c++  java
  • Flash AS2.0中复杂按键操作的捕获

    在我的flash游戏《牧场物语》中的按键操作是比较复杂的,我们用的语言是AS2.0,它的捕获按键并不像我们想象的那样。1当某个键按下不松开的话它会不断的触发该按键事件,但事实我们只想让它执行一次我们想要执行的代码;2当我们想要使用组合键,如C+X,而且是必须C在X前先按下才会触发我们的代码,这个也不是两行代码就能解决的;3对于有些按键,如方向键,我们当然是希望它在按下后不断的执行一些代码,但并不想它跑的那样快,而是减慢速度。对于要想使用这些比较复杂的按键就要下番功夫了,下面是我的游戏中使用解决此问题的方案,供参考,同时也希望得到更好的方案给我分享。
    P.S.代码中的keyLock变量表示操作模式,在游戏、帮助、工具葙等里面它们都有方向键,但很显然是不一样的操作,需要变量来区分它们。

     1onClipEvent (enterFrame) {
     2    if (Key.isDown(67)) {//2-8:C键按下,kissC=1表示C键此时正保持按下状态,kissC=0表示C键此时正保持松开状态,以下同
     3        if (_root.kissC == 0{
     4            _root.kissC = 1;
     5        }

     6    }
     else if (_root.kissC == 1{
     7        _root.kissC = 0;
     8    }

     9    if (Key.isDown(90)) {//9-15:Z键由松开状态变成按下状态,执行相应代码并止执行一次
    10        if (_root.kissZ == 0{
    11            _root.functionKeyZ();
    12            _root.kissZ = 1;
    13        }

    14    }
     else if (_root.kissZ == 1{
    15        _root.kissZ = 0;
    16    }
     else if (Key.isDown(88)) {//16-29:X键操作
    17        if (_root.kissC == 0{//17-21:单纯的X键按下操作
    18            if (_root.kissX == 0{
    19                _root.functionKeyX();
    20                _root.kissX = 1;
    21            }

    22        }
     else {//22-24:组合键C+X
    23            _root.changeFurnishment();
    24        }

    25    }
     else if (_root.kissX == 1{
    26        _root.kissX = 0;
    27        if(_root.keyLock == 4){
    28            _root.furnishmentEnd = 1;
    29        }

    30    }
     else if (Key.isDown(65)) {//30-36:A键,同Z键
    31        if (_root.kissA == 0{
    32            _root.functionKeyA();
    33            _root.kissA = 1;
    34        }

    35    }
     else if (_root.kissA == 1{
    36        _root.kissA = 0;
    37    }
     else if (Key.isDown(27)) {//37-44:Esc键,同Z键
    38        if (_root.kissEsc == 0{
    39            _root.functionKeyEsc();
    40            _root.kissEsc = 1;
    41        }

    42    }
     else if (_root.kissEsc == 1{
    43        _root.kissEsc = 0;
    44    }

    45    if (Key.isDown(37)) {//45-53:左方向键按下,在不同的操作模式下执行不同的代码,同时变量kissLURD用来减慢执行代码的速度,每隔5次执行一次,以下同理
    46        if (_root.keyLock == 0 || _root.keyLock == 1{
    47            _root.functionKeyLeft();
    48        }
     else if (_root.keyLock == 2{
    49            if (_root.kissLURD == 0{
    50                _root.showInfo.goLeft();
    51            }

    52            _root.kissLURD = (_root.kissLURD+1)%5;
    53        }

    54    }
     else if (Key.isDown(38)) {
    55        if (_root.keyLock == 0 || _root.keyLock == 1{
    56            _root.functionKeyUp();
    57        }
     else if (_root.keyLock == 2{
    58            if (_root.kissLURD == 0{
    59                _root.showInfo.goUp();
    60            }

    61            _root.kissLURD = (_root.kissLURD+1)%5;
    62        }

    63    }
     else if (Key.isDown(39)) {
    64        if (_root.keyLock == 0 || _root.keyLock == 1{
    65            _root.functionKeyRight();
    66        }
     else if (_root.keyLock == 2{
    67            if (_root.kissLURD == 0{
    68                _root.showInfo.goRight();
    69            }

    70            _root.kissLURD = (_root.kissLURD+1)%5;
    71        }

    72    }
     else if (Key.isDown(40)) {
    73        if (_root.keyLock == 0 || _root.keyLock == 1{
    74            _root.functionKeyDown();
    75        }
     else if (_root.keyLock == 2{
    76            if (_root.kissLURD == 0{
    77                _root.showInfo.goDown();
    78            }

    79            _root.kissLURD = (_root.kissLURD+1)%5;
    80        }

    81    }
     else {
    82        _root.kissLURD = 0;
    83    }

    84}

    85

    作者:Rick Carter
    出处:http://pains.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源
    Spring Boot 如何给微信公众号返回消息
    Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
    Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置
    Spring Boot 开发微信公众号后台
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    Spring Boot2 系列教程(十六)定时任务的两种实现方式
    Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
    Spring Boot2 系列教程(十四)CORS 解决跨域问题
    JavaScript二维数组
  • 原文地址:https://www.cnblogs.com/pains/p/932866.html
Copyright © 2011-2022 走看看