簡體   English   中英

如何處理Java中的同時按鍵?

[英]How do I handle simultaneous key presses in Java?

如何處理Java中的同時按鍵?

我正在嘗試編寫游戲,並且需要一次處理多個按鍵。

當我按住一個鍵(假設向前移動),然后按住另一個鍵(例如,向左轉)時,將檢測到新鍵,但不再檢測到舊的鍵。

一種方法是跟蹤自己當前按下了哪些鍵。

當您收到keyPressed事件時,將新鍵添加到列表中;否則,將新鍵添加到列表中。 當您收到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. */

}

一般來說,您要描述的內容可以使用bitmasks來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM