Java 如何将按键侦听器更改为鼠标侦听器

Java 如何将按键侦听器更改为鼠标侦听器,java,Java,我正在开发一个游戏(对java也不是很有经验),目前我已经将它设置为使用箭头键来改变用户的方向。我希望能够使用鼠标/触摸板来改变用户的方向,或者尽可能让用户对象跟随光标(如game agar.io)。我需要做些什么才能让它工作。如果我遗漏了什么,那么我可以添加它,但我认为这应该足够了 keyDown[0] = false; keyDown[1] = false; keyDown[2] = false; keyDown[3] = false; } public

我正在开发一个游戏(对java也不是很有经验),目前我已经将它设置为使用箭头键来改变用户的方向。我希望能够使用鼠标/触摸板来改变用户的方向,或者尽可能让用户对象跟随光标(如game agar.io)。我需要做些什么才能让它工作。如果我遗漏了什么,那么我可以添加它,但我认为这应该足够了

    keyDown[0] = false;
    keyDown[1] = false;
    keyDown[2] = false;
    keyDown[3] = false;
}


public void keyPressed(KeyEvent e){
    int key = e.getKeyCode();

    for(int i = 0; i < handler.object.size(); i++){
        GameObject tempObject = handler.object.get(i);

        if(tempObject.getId() == ID.Player){
            //key events for player 1

            if(key == KeyEvent.VK_W) {tempObject.setVelY(-5); keyDown[0] = true;}
            if(key == KeyEvent.VK_S) {tempObject.setVelY(+5); keyDown[1] = true;}
            if(key == KeyEvent.VK_D) {tempObject.setVelX(+5); keyDown[2] = true;}
            if(key == KeyEvent.VK_A) {tempObject.setVelX(-5); keyDown[3] = true;}

            if(key == KeyEvent.VK_UP) {tempObject.setVelY(-5); keyDown[0] = true;}
            if(key == KeyEvent.VK_DOWN) {tempObject.setVelY(+5); keyDown[1] = true;}
            if(key == KeyEvent.VK_RIGHT) {tempObject.setVelX(+5); keyDown[2] = true;}
            if(key == KeyEvent.VK_LEFT) {tempObject.setVelX(-5); keyDown[3] = true;}

        if(key == KeyEvent.VK_ESCAPE) System.exit(1);
        if(key == KeyEvent.VK_P) Game.gameState = STATE.Pause;
        if(key == KeyEvent.VK_O) Game.gameState = STATE.Game;
        }
    }
}
@Override
public void keyReleased(KeyEvent e){
    int key = e.getKeyCode();

    for(int i = 0; i < handler.object.size(); i++){
        GameObject tempObject = handler.object.get(i);

        if(tempObject.getId() == ID.Player){
            //key events for player 1

            if(key == KeyEvent.VK_W) keyDown[0] = false;
            if(key == KeyEvent.VK_S) keyDown[1] = false;
            if(key == KeyEvent.VK_D) keyDown[2] = false;
            if(key == KeyEvent.VK_A) keyDown[3] = false;

            if(key == KeyEvent.VK_UP) keyDown[0] = false;
            if(key == KeyEvent.VK_DOWN) keyDown[1] = false;
            if(key == KeyEvent.VK_RIGHT) keyDown[2] = false;
            if(key == KeyEvent.VK_LEFT) keyDown[3] = false;

            //Vertical movement
            if(!keyDown[0] && !keyDown[1]) tempObject.setVelY(0);
            //Horizontal movement
            if(!keyDown[2] && !keyDown[3]) tempObject.setVelX(0);
        }
    }
}
}
keyDown[0]=false;
keyDown[1]=错误;
keyDown[2]=错误;
keyDown[3]=错误;
}
按下公共无效键(按键事件e){
int key=e.getKeyCode();
对于(int i=0;i
因此,为了将功能更改为鼠标侦听器,您只需要更改一些内容

目前,您使用的是监听键盘的KeyListener类

你可能有一些东西看起来像:

implements KeyListener
您可以将其更改为:

implements MouseMotionListener
然后可以将按键事件更改为鼠标事件

public void keyPressed(KeyEvent e)
就是现在控制你速度的东西。鼠标移动事件和listner方法可在此处找到:

特别注意:

public void mouseMoved(MouseEvent e)
速度计算psudo代码可能类似于:

centerX = window.width / 2;
centerY = window.height / 2;



deltaX = e.getX() - centerX;
deltaY = e.getY() - centerY;

scale = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)) / speed;

tempObject.setVelY(deltaY / scale);
tempObject.setVelX(deltaX / scale);

您希望鼠标如何控制移动?移动它应该移动玩家吗?还是LMB向左移动,RMB向右移动?或者屏幕上有按钮可以点击?@SilvioMayolo我希望用户对象像在游戏agar.io中那样跟随光标,如果这有意义的话,当前您只需按住箭头键,对象就会朝被点击的方向移动。您想将状态管理移到其他地方。您可以使用任何想要更改状态的输入,“主循环”将对其进行检查并采取适当的操作。基本思想是维护某种类型的
列表
集合
,它描述了哪些“输入”当前处于活动状态或未处于活动状态,这一概念如中所示。然后,输入是什么并不重要,只是状态被更新了