所以我只是在学习java,而在我的C ++工作中,SDL的关键检测要容易得多。但是当我尝试用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){}
这个尝试块是我测试,以确保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有这样的函数吗?或者我真的需要将一个关键监听器放在我希望受该密钥影响的每个对象上吗?
答案 0 :(得分:1)
最简单的解决方案,通常更强大,就是使用key bindings API
KeyListener
的主要问题是焦点上下文。也就是说,它注册的组件必须是可聚焦的并且在引发关键事件之前具有焦点