我正在制作一个两人游戏小程序。两名玩家都需要控制自己的飞盘,防止球撞到墙壁。一名玩家通过鼠标移动来控制他的光盘,并通过键盘上下控制其他控件。问题是第二个玩家无法控制他的光盘,因为 MouseMotionListener 导致键盘按键无法保持焦点。我不知道如何解决这个问题。这是代码:
public void init()
{
handle = new HandlerClass();
addMouseMotionListener(handle);
addKeyListener(handle);
}
private class HandlerClass implements MouseMotionListener,KeyListener
{
public void mouseMoved(MouseEvent event)
{
MouseY=event.getY();
if(MouseY<=0)
MouseY=0;
else
if(MouseY>=getHeight()-radius*2-1)
MouseY=getHeight()-radius*2-1;
}
public void keyPressed(KeyEvent event)
{
switch(event.getKeyCode())
{
case KeyEvent.VK_UP:
if(keyboardY<=0)
{
keyboardY=0;
}
keyboardY=keyboardY+1;
break;
case KeyEvent.VK_DOWN:
System.out.println("down key pressed");
if(keyboardY>=getHeight()-radius*2-1)
{
keyboardY=getHeight()-radius*2-1;
}
keyboardY-=1;
break;
}
}
编辑: 我通过添加 setFocusable(true); 解决了键盘失去焦点的问题,但现在游戏闪烁得很厉害。我无法理解游戏中发生了什么。 问候
最佳答案
使用Key Bindings通过KeyListener
,它提供了指定不同焦点上下文的能力。
关于你的第二个问题,听起来你正在直接在顶层容器上绘画。我会用示例代码发布一个单独的问题。
关于java - 当鼠标监听器处于 Activity 状态时键盘失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531359/