EDIT # 1:
После некоторой игры у меня есть несколько различных тестов:
- Условия записи, которые указывают, что ключ не закодирован (alphanumeri c key прессы не регистрируются или не работают)
float x = 50;
float y = 50;
float x2 = 40;
float y2 = 40;
void setup() {
size(100, 100);
}
void draw() {
background(0);
rect(x, y, 10, 10);
rect(x2, y2, 10, 10);
}
void keyPressed() {
if (keyPressed) {
if (key == CODED) {
if (keyCode == LEFT) {
x = x - 10;
println("LEFT KEY PRESS; Square #1 moves LEFT", x);
} else if (keyCode == RIGHT) {
x = x + 10;
println("RIGHT KEY PRESS; Square #1 moves RIGHT", x);
} else if (keyCode == UP) {
y = y - 10;
println("UP KEY PRESS; Square #1 moves UP", y);
} else if (keyCode == DOWN) {
y = y + 10;
println("DOWN KEY PRESS; Square #1 moves DOWN", y);
} else if (key != CODED && key == 'a') {
x2 = x2 - 10;
println("'a' KEY PRESS; Square #2 moves LEFT", x2);
} else if (key != CODED && key == 'd') {
x2 = x2 + 10;
println("'d' KEY PRESS; Square #2 moves RIGHT", x2);
} else if (key != CODED && key == 'w') {
y2 = y2 - 10;
println("'w' KEY PRESS; Square #2 moves UP", y2);
} else if (key != CODED && key == 's') {
y2 = y2 + 10;
println("'s' KEY PRESS; Square #2 moves DOWN", y2);
}
}
}
}
Запустить отдельную цепочку условных обозначений для alphanumeri c Проверки с нажатой клавишей (alphanumeri c нажатия клавиш не регистрируются или не работают)
float x = 50;
float y = 50;
float x2 = 40;
float y2 = 40;
void setup() {
size(100, 100);
}
void draw() {
background(0);
rect(x, y, 10, 10);
rect(x2, y2, 10, 10);
}
void keyPressed() {
if (keyPressed) {
if (key == CODED) {
if (keyCode == LEFT) {
x = x - 10;
println("LEFT KEY PRESS; Square #1 moves LEFT", x);
} else if (keyCode == RIGHT) {
x = x + 10;
println("RIGHT KEY PRESS; Square #1 moves RIGHT", x);
} else if (keyCode == UP) {
y = y - 10;
println("UP KEY PRESS; Square #1 moves UP", y);
} else if (keyCode == DOWN) {
y = y + 10;
println("DOWN KEY PRESS; Square #1 moves DOWN", y);
if (keyPressed) {
if (key == 'a') {
x2 = x2 - 10;
println("'a' KEY PRESS; Square #2 moves LEFT", x2);
} else if (key == 'd') {
x2 = x2 + 10;
println("'d' KEY PRESS; Square #2 moves RIGHT", x2);
} else if (key == 'w') {
y2 = y2 - 10;
println("'w' KEY PRESS; Square #2 moves UP", y2);
} else if (key == 's') {
y2 = y2 + 10;
println("'s' KEY PRESS; Square #2 moves DOWN", y2);
}
}
}
}
}
}
Проверьте наличие букв alphanumeri c перед проверкой кодированных ключей во вложенной цепочке (кажется, что регистрирует все нажатия клавиш и выводит правильные результаты на консоль, и регистрирует как минимум два одновременных нажатия клавиш, но программа только продолжит функционировать как и предназначено для первого нажатия клавиши, когда оба удерживаются)
float x = 50;
float y = 50;
float x2 = 40;
float y2 = 40;
void setup() {
size(100, 100);
}
void draw() {
background(0);
rect(x, y, 10, 10);
rect(x2, y2, 10, 10);
}
void keyPressed() {
if (keyPressed) {
if (key == 'a') {
x2 = x2 - 10;
println("'a' KEY PRESS; Square #2 moves LEFT", x2);
} else if (key == 'd') {
x2 = x2 + 10;
println("'d' KEY PRESS; Square #2 moves RIGHT", x2);
} else if (key == 'w') {
y2 = y2 - 10;
println("'w' KEY PRESS; Square #2 moves UP", y2);
} else if (key == 's') {
y2 = y2 + 10;
println("'s' KEY PRESS; Square #2 moves DOWN", y2);
} else if (key == CODED) {
if (keyCode == LEFT) {
x = x - 10;
println("LEFT KEY PRESS; Square #1 moves LEFT", x);
} else if (keyCode == RIGHT) {
x = x + 10;
println("RIGHT KEY PRESS; Square #1 moves RIGHT", x);
} else if (keyCode == UP) {
y = y - 10;
println("UP KEY PRESS; Square #1 moves UP", y);
} else if (keyCode == DOWN) {
y = y + 10;
println("DOWN KEY PRESS; Square #1 moves DOWN", y);
}
}
}
}
Хотя я не предвидел продолжения исходной проблемы, проблема немного изменилась, чтобы охватить одновременные продолженные проверки нажатия клавиш .
Для третьего контрольного примера результаты аналогичны для комбинаций нажатий клавиш alphanumeri c only, alphanumeri c и кодированных и только кодированных клавиш; движение начинается, но продолжается только в зависимости от того, какая клавиша была нажата первой.
Насколько мне известно, опция keyHeld
отсутствует. Существует опция keyReleased
, но я предполагаю, что это не решение здесь. Я попытался использовать &&
для проверки двух ключей, но это не работает для alphanumeri c ключей (выдает ошибку «Оператор && не определен для типа (ов) аргумента char, char») .
Оригинальный пост: я сейчас работаю над репликацией PONG и у меня возникают проблемы с работой обоих манипуляторов. Я написал следующий код в существующую программу, чтобы изменить позицию Y каждого весла, и добавил операторы println()
, чтобы увидеть, что происходит:
...
void keyPressed(){
if (keyPressed){
if (key == CODED){
if (keyCode == UP){
paddle_Y = paddle_Y - 20;
println("UP");
} else if (keyCode == DOWN){
paddle_Y = paddle_Y + 20;
println("DOWN");
}
if (keyPressed){
if (key == 'w'){
paddle_Y2 = paddle_Y2 - 20;
println(key);
} else if (key == 's'){
paddle_Y2 = paddle_Y2 + 20;
println(key);
}
}
}
}
println(paddle_Y, paddle_Y2);
}
Для этого сегмента println("UP");
, println("DOWN");
, и println(paddle_Y, paddle_Y2);
работают должным образом, при этом консоль отображает результаты, подобные следующим:
UP
480, 500
DOWN
500, 500
DOWN
520, 500
UP
500, 500
**'s' is pressed but does not print**
500, 500
**'w' is pressed but does not print**
500, 500
...
Текущая функциональность такова, что одно весло движется, а другое - нет. В другой попытке изолировать проблему, я попытался сделать это как отдельную программу:
float x = 100;
float x2 = 100;
void setup(){
size(200, 200);
}
void keyPressed(){
if (keyPressed){
if (key == CODED){
if (keyCode == UP){
x = x - 20;
println("UP");
} else if (keyCode == DOWN){
x = x + 20;
println("DOWN");
}
if (keyPressed){
if (key == 'w'){
x2 = x2 - 20;
println(key);
} else if (key == 's'){
x2 = x2 + 20;
println(key);
}
}
}
}
println(x, x2);
}
И в этой программе вообще ничего не регистрируется и строки не выводятся на консоль.
Я склонен полагать, что нажатие клавиши не регистрируется должным образом, но я не уверен, где ошибка. Я пробовал это как на Windows 10, так и на любой последней версии ОС Ma c.