gpt4 book ai didi

Java,有没有更好的方法来进行按键检测?

转载 作者:行者123 更新时间:2023-11-30 11:18:46 26 4
gpt4 key购买 nike

所以我只是在学习 java,从我在 C++ 中的工作来看,使用 SDL 可以更容易地检测 key 。但是当我尝试用 Java 来做时,它似乎从来没有工作过。有人可以检查我的代码并确保所有这些都正常吗?是的,我确实导入了所有内容....

public class start extends JFrame{
JLabel label = new JLabel();
Screen circle = new Screen();
int x = 0;
int y = 0;
static boolean m = false;
boolean running = true;

public static void main(String args[]){
start gui = new start();
gui.go();

}

public void go(){
JFrame j = new JFrame();
j.setDefaultCloseOperation(EXIT_ON_CLOSE);
j.setSize(400,400);
pannel p = new pannel();
Player player = new Player();
j.add(player);



j.setVisible(true);

player.addKeyListener(new key());

//try{
// for(int i = 0; i < 300; i ++){
// player.update();
// Thread.sleep(50);
// j.repaint();
// }
//}
//catch(Exception e){}

我对这个 try block 进行了测试,以确保 player.update() 有效……确实如此!所以我知道问题不在于更新功能

    while(running){
//Updates
if(m)
player.update();
System.out.println(m);

我让程序打印出 m 的值,看看它是否曾经是真的......它从来不是......

        //Rendering

player.repaint();

}

}

public class pannel extends JPanel{
public void pannel(){
JPanel p = new JPanel();
Player player = new Player();

p.add(player);

p.setVisible(true);


}
}

public class key implements KeyListener{

public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_SPACE:
m = true;
break;
}

}

public void keyReleased(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_SPACE:
m = false;
break;
}

}

public void keyTyped(KeyEvent e) {

}

}

在 C++ 中,您必须调用一个函数来检测是否存在任何类型的键检测。您在主循环中使用了这个函数,它真的很简单……Java 有这样的函数吗?还是我真的需要在我希望受该键影响的每个对象上放置一个键监听器?

最佳答案

最简单且通常更强大的解决方案是使用 key bindings API

KeyListener 的主要问题是焦点上下文。也就是说,它注册到的组件必须是可聚焦的并且在引发关键事件之前具有焦点

关于Java,有没有更好的方法来进行按键检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23644113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com