我正在开发一款游戏(对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);
}
}
}
}
答案 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);