首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >右键输入处理

右键输入处理
EN

Stack Overflow用户
提问于 2014-04-24 02:22:36
回答 1查看 66关注 0票数 0

Hello :)我正在努力寻找处理java键输入的有效方法。我有一段代码:

代码语言:javascript
复制
public void keyPressed(KeyEvent e) {
   if (checkInput) {
       switch(e.getKeyCode()) {
           case KeyEvent.VK_LEFT:
               arrow[LEFT] = true; // boolean for my key input 
               checkInput = false;
           break;
           case KeyEvent.VK_RIGHT:
               arrow[RIGHT] = true;
               checkInput = false;
           break;
       }
   }
}

然后:

代码语言:javascript
复制
public void keyReleased(KeyEvent e) {
           switch(e.getKeyCode()) {
               case KeyEvent.VK_LEFT:
                   arrow[LEFT] = false; // boolean for my key input 
                   checkInput = true;
               break;
               case KeyEvent.VK_RIGHT:
                   arrow[RIGHT] = false;
                   checkInput = true;
               break;
           }
       }
    }

我的意思是,当我按下left或right功能时,keyPressed会停止检查按键输入,但它不起作用……在主类中,我有构造函数:

代码语言:javascript
复制
public Game() {

        addKeyListener(new KeyListener() {

            public void keyTyped(KeyEvent e) {
            }
            public void keyReleased(KeyEvent e) {
                player.keyReleased(e); // function mentioted above are from Player class. 

            }
            public void keyPressed(KeyEvent e) {
                player.keyPressed(e);

            }

        });
        setFocusable(true);
    }
EN

回答 1

Stack Overflow用户

发布于 2014-04-24 02:42:19

如果你想听我的意见,请不要试图在按下某个键的同时阻止其他键的按下。这似乎是一个用户指定的任务(按多个键),除非它对你的游戏有直接的危害,否则你应该把所有这些努力都放在一个不合理的限制中。

代码语言:javascript
复制
public boolean[] keys = new boolean[200]; //just enough to hold all key codes

public void keyPressed(KeyEvent e) {
     keys[e.getKeyCode()] = true;
}

public void keyReleased(KeyEvent e) {
     keys[e.getKeyCode()] = false;
}

现在,您可以根据按下的键进行移动。

代码语言:javascript
复制
while(true) {
     if(keys[KeyEvent.VK_RIGHT]) {
          //move right
     }
}

但是,如果你真的想要这个限制:

代码语言:javascript
复制
public boolean[] keys = new boolean[200]
public boolean acceptEvents = true;

public void keyPressed(KeyEvent e) {
     if(acceptEvents) {
          keys[e.getKeyCode()] = true;
          acceptEvents = false;
     }
}

public void keyReleased(KeyEvent e) {
     keys[e.getKeyCode()] = false;
     acceptEvents = true;
}

真的很难知道您试图用您给我们的有限资源做什么(您在代码示例中遗漏了很多东西),所以让我知道这是否有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23252284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档