【发布时间】:2012-08-25 13:14:39
【问题描述】:
我在错误的地方 (GameDev) 发布了此内容,但没有得到任何回复。所以我在这里再次发布。
我正在制作一个小程序游戏,它正在渲染,游戏循环正在运行,动画正在更新,但键盘输入不起作用。这是一个 SSCCE。
public class Game extends JApplet implements Runnable {
public void init(){
// Initialize the game when called by browser
setFocusable(true);
requestFocus();
requestFocusInWindow(); // Always returning false
GInput.install(this); // Install the input manager for this class
new Thread(this).start();
}
public void run(){
startGameLoop();
}
}
这是 GInput 类。
public class GInput implements KeyListener {
public static void install(Component c){
new GInput(c);
}
public GInput(Component c){
c.addKeyListener(this);
}
public void keyPressed(KeyEvent e){
System.out.println("A key has been pressed");
}
......
}
这是我的 GInput 类。当作为小程序运行时,它不起作用,当我将 Game 类添加到框架时,它可以正常工作。
谢谢
现在解决了。查看我的解决方案
【问题讨论】:
-
GameDev 的页面是gamedev.stackexchange.com/questions/34555/…
-
由于它作为框架工作,最好的方法是使用Java Web Start从链接启动框架。
-
我不做小程序,所以我不能确定问题出在哪里,但是您可以通过使用键绑定而不是 KeyListener 来解决焦点问题。此外,您的 SSCCE 不符合 SSCCE 规范。我们不能运行它也不能测试它。
-
我知道我可以通过 web start 做到这一点,但我不想学习作为小程序进行编程,因为这将在我的游戏引擎中进行
-
我认为大多数人更愿意看到合规的 sscce。
标签: java swing applet keyboard focus