1

我正在制作一个两人游戏小程序。两名球员都需要控制他们的飞盘以防止球与墙壁发生碰撞。一名玩家通过鼠标移动控制他的光盘,并通过键盘上下控制其他控件。问题是第二个玩家无法控制他的光盘,因为由于 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);但现在游戏像地狱一样闪烁。我不知道游戏中发生了什么。问候

4

2 回答 2

1

对键盘和鼠标操作使用不同的侦听器。

于 2012-11-23T16:22:38.697 回答
1

使用Key Bindings over KeyListener,它提供了指定不同焦点上下文的能力。

In regard to you second question, it sounds like you're painting directly onto a top level container. I'd post a separate question with example code.

于 2012-11-23T21:42:19.957 回答