우분투를 사용합니다. 우분투가 키보드 입력을 처리하는 방식은 윈도우의 입력 방식과 다릅니다. 우분투에서 키 누름 이벤트가 트리거 된 후에 키를 놓은 경우에도 키 해제 이벤트가 바로 그 후에 트리거됩니다. 이러한 잘못된 키 릴리스 이벤트로 인해 특히 충돌 감지 프로그래밍과 같이 게임을 프로그래밍하기가 어려워졌습니다. 내 코드가 얼마나 완벽하든 문제를 해결할 수는 없습니다.리눅스에서 키보드 이벤트를 어떻게 처리합니까?
열쇠가 눌려 지거나 놓일지를 출력하는 프로그램을 작성한다면, 우분투의 출력은 다음과 같이 나타납니다 - keyPressed> keyReleased> keyPressed> keyReleased 등등 열쇠를 풀지 마라. 반면 창문에서 - 키 누름> 키 누름> 누름 누름> 누름 누름 등.
이 문제를 해결할 방법을 알고 있습니까?
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Strange extends JPanel implements KeyListener{
public Strange(){
this.setPreferredSize(new Dimension(500, 500));
addKeyListener(this);
setFocusable(true);
JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.pack();
frame.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_LEFT)
System.out.println("left is pressed");
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_LEFT)
System.out.println("left is released");
}
@Override
public void keyTyped(KeyEvent e) {}
public static void main(String[] args){
new Strange();
}
}
어떤 언어를 사용하고 있습니까? 몇 가지 코드를 보여줄 수 있습니까? –
나는 java를 사용합니다. 하지만 내가 게시 한 문제는 프로그래밍 언어에 의존하지 않고 낮은 수준의 문제입니다. – arandomguy
@adnankamili 좋아요. 내 문제를 시연 할 수있는 코드를 게시했습니다. – arandomguy