Прежде всего, я рекомендую изменить класс Player1
соответственно Player2
. Не используйте другой класс, для объектов, которые ведут себя одинаково. Обратите внимание, единственное отличие состоит в том, что игроки перемещаются разными клавишами, это не должно обрабатываться разными объектами.
Создать отдельный класс Player
. Класс использует новые методы pressed
и released
, которые изменяют текущее направление движения (dx
, dy
) в зависимости от входных параметров left
, right
, up
и * 1012. *. Например:
class Player {
int x, y;
int dx = 0, dy = 0;
float speedX = 5;
float speedY = 5;
int size;
Player(int newX, int newY, int newSize) {
x = newX;
y = newY;
size = newSize;
}
void run() {
display();
movePlayer();
}
void movePlayer() {
x += dx * speedX;
y += dy * speedY;
}
void display() {
ellipse(x, y, size, size);
}
void pressed(boolean left, boolean right, boolean up, boolean down) {
if (left) dx = -1;
if (right) dx = 1;
if (up) dy = -1;
if (down) dy = 1;
}
void released(boolean left, boolean right, boolean up, boolean down) {
if (left) dx = 0;
if (right) dx = 0;
if (up) dy = 0;
if (down) dy = 0;
}
}
Используйте электронные обратные вызовы клавиатуры keyPressed()
и keyReleased()
, чтобы изменить движение игроков. Параметры left
, right
, up
и down
устанавливаются в зависимости от нажатых или отпущенных клавиш. Например:
Player player1;
Player player2;
void setup() {
// [...]
}
void draw() {
// [...]
}
void keyPressed() {
player1.pressed((key == 'a' || key == 'A'), (key == 'd' || key == 'D'),
(key == 'w' || key == 'W'), (key == 's' || key == 'S'));
player2.pressed(keyCode == LEFT, keyCode == RIGHT, keyCode == UP, keyCode == DOWN);
}
void keyReleased() {
player1.released((key == 'a' || key == 'A'), (key == 'd' || key == 'D'),
(key == 'w' || key == 'W'), (key == 's' || key == 'S'));
player2.released(keyCode == LEFT, keyCode == RIGHT, keyCode == UP, keyCode == DOWN);
}
Это позволяет обрабатывать состояние нескольких клавиш одновременно.