查看下面的代码:
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_W)
{
new panel().player1.playerMoves("North", 10, 600,500);
}
else if (e.getKeyCode() == KeyEvent.VK_S)
{
new panel().player1.playerMoves("South", 10, 600,500);
}
if (e.getKeyCode() == KeyEvent.VK_UP)
{
new panel().player2.playerMoves("North", 10, 600,500);
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
new panel().player2.playerMoves("South", 10, 600,500);
}
}
我对它没有任何问题,我的问题不需要我调用的类的知识。现在的情况是有两个玩家。Player1的控件绑定到方向键,player2的控件绑定到箭头键。然而,这些if语句似乎是相互覆盖的。我的意思是,如果player1向上移动,而player2开始向下移动,那么player1将不得不停止。我正在考虑使用多线程解决这个问题,但我不确定它是否有效,或者是否有一个更简单的解决方案。我能做些什么来让多个按键一起工作吗?
您可以将已按下的键存储在某个列表中,称为pressedKeys
。当按下某个键时,将该键添加到pressedKeys
。当一个键被释放时(覆盖keyReleased()
方法),您从pressedKeys
中删除该键。然后,你可以根据按下的按键来移动玩家。例如,
public void movePlayer() {
if ( pressedKeys.contains( UP ) ) {
movePlayerUp();
}
if ( pressedKeys.contains( DOWN ) ) {
movePlayerDown();
}
if ( pressedKeys.contains( S ) ) {
movePlayerDown();
}
...
}
所需的类:
class MyListener implements KeyListener {
private ArrayList< Integer > keysPressed = new ArrayList< Integer >();
public MyListener() {
}
@Override
public void keyPressed( KeyEvent e ) {
if ( !keysPressed.contains( e.getKeyCode() ) ) {
keysPressed.add( e.getKeyCode() );
}
movePlayer();
}
@Override
public void keyReleased( KeyEvent e ) {
keysPressed.remove( e.getKeyCode() );
}
public void movePlayer() {
//move player based on what keys are pressed.
}
}