Я пытаюсь сделать игру для пинг-понга для 2 игроков. Вот мой текущий код. Пока все хорошо, но моя проблема в том, что всякий раз, когда я нажимаю A или D (которые являются элементами управления игрока 1) левым или правым (элементы управления игрока 2), программа не может зарегистрировать оба и будет принимать команду только от одного из них. Мне нужно, чтобы оба игрока могли двигаться одновременно. Я попробовал логический подход (при каждом ключе переключать логическое значение), но также представляет ту же проблему. Я что-то упустил в KeyListeners?
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Mechanism extends JPanel implements KeyListener, ActionListener {
private boolean A,D,L,R;
private int p1_posX = 250;
private int p1_score;
private int p2_posX = 250;
private int p2_score;
private Timer timer;
private int delay = 10;
private int ball_posX = 250;
private int ball_posY = 450;
private int ball_dirX;
private int ball_dirY;
public Mechanism() {
addKeyListener(this);
setBackground(Color.black);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
timer = new Timer(delay, this);
timer.start();
}
public void paint(Graphics g) {
//background
g.setColor(Color.black);
g.fillRect(0, 0, 600, 900);
//ball
g.setColor(Color.white);
g.fillOval(ball_posX, ball_posY, 15, 15);
//left border
g.setColor(Color.white);
g.fillRect(0, 0, 10, 900);
//right border
g.setColor(Color.white);
g.fillRect(584, 0, 10, 900);
//player 1 (top)
g.setColor(Color.white);
g.fillRect(p1_posX, 50, 95, 10);
//player 2 (bot)
g.setColor(Color.white);
g.fillRect(p2_posX, 820, 95, 10);
g.dispose();
}
@Override
public void actionPerformed(ActionEvent arg0) {
timer.start();
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_A) {
if (p1_posX <= 10) {
p1_posX = 10;
}
else {
p1_posX -= 20;
}
}
if (e.getKeyCode() == KeyEvent.VK_D) {
if (p1_posX >= 584) {
p1_posX = 584;
}
else {
p1_posX += 20;
}
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (p2_posX <= 10) {
p2_posX = 10;
}
else {
p2_posX -= 20;
}
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
if (p2_posX >= 584) {
p2_posX = 584;
}
else {
p2_posX += 20;
}
}
if (e.getKeyCode() == KeyEvent.VK_END) {
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}