Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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
在Java中如何处理同时按键?_Java_Events_Keyboard - Fatal编程技术网

在Java中如何处理同时按键?

在Java中如何处理同时按键?,java,events,keyboard,Java,Events,Keyboard,在Java中如何处理同时按键 我正在尝试编写一个游戏,需要同时处理多个按键 当我按住一个键(比方说向前移动)然后按住另一个键(例如向左转弯)时,会检测到新键,但不再检测到旧键。一种方法是跟踪自己当前按下的键 当您获得按键事件时,将新按键添加到列表中;当您获得keyReleased事件时,请从列表中删除该密钥 然后,在游戏循环中,您可以根据按键列表中的内容执行操作。一般来说,您所描述的内容可以通过使用来实现。下面是一个代码示例,演示了在按下CTRL+Z时如何执行操作: import java.aw

在Java中如何处理同时按键

我正在尝试编写一个游戏,需要同时处理多个按键


当我按住一个键(比方说向前移动)然后按住另一个键(例如向左转弯)时,会检测到新键,但不再检测到旧键。

一种方法是跟踪自己当前按下的键

当您获得按键事件时,将新按键添加到列表中;当您获得keyReleased事件时,请从列表中删除该密钥


然后,在游戏循环中,您可以根据按键列表中的内容执行操作。

一般来说,您所描述的内容可以通过使用来实现。

下面是一个代码示例,演示了在按下CTRL+Z时如何执行操作:

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
class p4 extends Frame implements KeyListener
{
    int i=17;
    int j=90;
    boolean s1=false;
    boolean s2=false;

    public p4()
    {
        Frame f=new Frame("Pad");

        f.setSize(400,400);
        f.setLayout(null);
        Label l=new Label();
        l.setBounds(34,34,88,88);
        f.add(l);

        f.setVisible(true);
        f.addKeyListener(this);
    }

    public static void main(String arg[]){
        new p4();
    }

    public void keyReleased(KeyEvent e) {
        //System.out.println("re"+e.getKeyChar());

        if(i==e.getKeyCode())
        {
            s1=false;
        }

        if(j==e.getKeyCode())
        {
            s2=false;
        }
    }

    public void keyTyped(KeyEvent e) {
        //System.out.println("Ty");
    }

    /** Handle the key pressed event from the text field. */
    public void keyPressed(KeyEvent e) {
        System.out.println("pre"+e.getKeyCode());

        if(i==e.getKeyCode())
        {
            s1=true;
        }

        if(j==e.getKeyCode())
        {
            s2=true;
        }

        if(s1==true && s2==true)
        {
            System.out.println("EXIT NOW");
            System.exit(0);
        }
    }

    /** Handle the key released event from the text field. */

}

请提供更多详细信息!你们想做什么?糟糕的问题,你们需要更多的细节:为什么是环境?摆动AWT?你说的“把手”是什么意思?那似乎没那么老套。(显然,在聚焦方面存在一些小问题——我猜这一切都取决于获得/失去聚焦。)@MichaelMyers你如何解释重复的键,如果我按住一把键,它会像撬棍一样从侧面移动:a | a,a | a,a,a,a,a,a,a,a,a,a,a|a@JayAvon当前位置:我认为这值得提出一个新问题。@MichaelMyers是新问题的链接。任何帮助都是难以置信的。我建议使用位集而不是键列表Janusz是什么意思?这不仅仅是相关的。是的,它与Java无关,但这并不意味着它有帮助。但是如果其他键必须是非修改键呢?比如说,在屏幕和拍摄空间中移动精灵的方向键?你希望能够在移动时拍摄