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

时间:2017-12-02 05:51:37

标签: java

我正在开发一款游戏(对java也不是很有经验),目前我已将它设置为使用箭头键来改变用户的方向。我希望能够使用鼠标/触摸板来改变用户的方向或使用户对象跟随光标(如游戏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);
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

因此,为了将功能更改为鼠标监听器,您只需要更改一些内容。

目前,您使用了侦听键盘的KeyListener类

你可能有类似的东西:

implements KeyListener

您可以将其更改为:

implements MouseMotionListener

然后,您可以将关键事件更改为鼠标事件。

public void keyPressed(KeyEvent e)

现在正在控制你的速度。鼠标移动事件和列表器方法可以在这里找到: https://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html

特别注意:

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);