Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo implementar la interacción del teclado con múltiples teclas en Processing

Cómo implementar la interacción del teclado con múltiples teclas en Processing

Primero me gustaría generalizar la pregunta: cómo presionar y soltar cualquier tecla en cualquier orden en Processing. En este proceso, siempre se generará la última tecla presionada. . La dificultad de este problema es que la variable clave en Processing siempre almacena el valor de la última tecla presionada o soltada. Por lo tanto, después de presionar una tecla y luego presionar otra tecla, si el programador no guarda activamente la información de la primera tecla con anticipación, se "perderá" y nunca se recuperará. En segundo lugar, aunque la documentación oficial de Processing dice que la variable booleana keyPressed tiene un valor verdadero siempre que se presione una tecla, lo que no se menciona en la documentación es que cuando se presionan varias teclas al mismo tiempo, siempre que se presione una tecla. Se produce el evento keyRelease, keyPressed ya no es cierto, incluso si todavía hay claves que no se han liberado en este momento. Para resolver el problema mencionado anteriormente, mi método es utilizar el tipo de datos IntList para crear una pila. Puede presionar cualquier tecla y los valores de las teclas presionadas se insertarán en la pila en orden. suelte cualquier tecla. La clave se elimina de la pila, por lo que el valor de la clave en la parte superior de la pila es siempre el valor de la clave que se presionó por última vez y no se ha liberado. Luego determine si imprimir el valor clave en la parte superior de la pila juzgando si la altura de la pila es distinta de cero (no a través del valor de keyPressed, por el motivo mencionado anteriormente). Este es el programa: IntList pkeys = new IntList(); //Esta es una lista int de longitud variable utilizada para stack

void setup(){

size(400, 300). );

fondo(255);

}

void draw(){

printkey();

//println(pkeys);

}

void keyPressed() {

//Cuando se presiona una nueva tecla, agrégala al principio de la pila El valor clave

if(!pkeys.hasValue(int(key)))

pkeys.append(int(key));

}

void keyReleased() {

for(int i=pkeys.size()-1; igt;=0; i--){

if(pkeys .get(i) == int(key)){

pkeys.remove(i); //Cuando se suelta una clave, busca el valor de la clave en la pila y elimínalo de la pila

}

}

}

void printkey(){

if(pkeys.size( )gt ;0){ //Cuando la altura de la pila no es cero, genera el valor clave en la parte superior de la pila

print(char(pkeys.get(pkeys.size()-1 )));

}

}

(Este programa es teóricamente aplicable a cualquier tecla, pero en situaciones reales, se producirán conflictos de hardware cuando ciertas teclas en (el teclado se presiona al mismo tiempo, a menudo la séptima tecla no funcionará después de presionar seis teclas al mismo tiempo)