我把这个贴错地方了( 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();
}
}
这是金普特班。
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");
}
......
}
这是我的金普特班。当作为applet运行时,它不工作,当我将game类添加到一个框架时,它工作正常。
谢谢
现在解决了。查看我的解决方案
3条答案
按热度按时间alen0pnh1#
现在我有两个选择,
使用jws
不创建小程序模式
现在我试着编一个新的班级叫
GApplet
. 它将一个游戏加载到一个新的jframe中,这个jframe在applet中工作。现在我也可以从网上进入全屏模式了。这里有一个班级的链接。这个
GApplet
班现在它像webstart一样工作,实际上是一个applet。
rvpgvaaj2#
如果在浏览器中运行,可能需要单击小程序以使其具有焦点。出于安全原因,大多数浏览器不会让applet在用户没有点击的情况下就抓住键盘焦点。
因此,我将添加一个鼠标侦听器,而不是直接在
init()
:zdwk9cvp3#
一个可能的解决方案是使用japplet的contentpane,将焦点放在它而不是japplet本身上。但我更喜欢使用键绑定。您可能需要使用摆动计时器才能工作:
我的sscce: