Обработка keyPressed () - PullRequest
       10

Обработка keyPressed ()

3 голосов
/ 19 октября 2011

В основном я должен использовать обработку для проекта (а не по выбору) и столкнулся с проблемой, касающейся одновременного нажатия нескольких клавиш.В функции keyPressed() у меня есть несколько условных выражений, каждое из которых сопоставляет ключ с действием.Это все хорошо, но предположим, что я хочу нажать несколько клавиш одновременно?

Есть предложения?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Создать массив. Присвойте числовое значение каждой проверяемой клавише, а затем включайте или выключайте соответствующее значение в массиве при каждом нажатии или отпускании клавиши. Затем в draw () вы проверяете значения массива, чтобы увидеть, какие из них включены и выключены в любой момент.

boolean[] keys = new boolean[4];
final int A = 0;
final int D = 1;
final int W = 2;
final int S = 3;

void setup() {

}

void draw() {

 if (keys[D]) {
   // do something;
 } 
if (keys[A]) {
   // do something;
 } 
if (keys[W]) {
   // do something;
 } 
if (keys[S]) {
   // do something;
 } 

} // end of draw()


void keyPressed() {
   int mybutton = key;  // the ascii value of the key that was pushed

     switch (mybutton) {
      case 101: 
        keys[D] = true;
        break;
      case 97: 
        keys[A] = true;
        break;
      case 44:
        keys[W] = true;
        break;
      case 111:
        keys[S] = true;
        break;
    } // end switch

} // end keyPressed

void keyReleased() {
switch (mybutton) {
      case 101: 
        keys[D] = false;
        break;
      case 97: 
        keys[A] = false;
        break;
      case 44:
        keys[W] = false;
        break;
      case 111:
        keys[S] = false;
        break;
    } // end switch

} // end keyReleased
2 голосов
/ 19 октября 2011

Вы можете использовать событие keydown и нажимать все ключи в списке (массив, стек и т. Д.), А затем очищать его при отпускании ключа.Клавиатура срабатывает в тот момент, когда клавиша выключается, поэтому, если вы сравните список с тем, который вы ожидаете, это сработает.Что-то вроде:

var arrKeys = [];

function zone_keyDown(event) {
   var evt = window.event || event;
   arrKeys.push(evt.keyCode);
}

function zone_keyReleased(event) {
   arrKeys = [];
}
1 голос
/ 19 октября 2011

Вместо того, чтобы использовать keyPressed () отдельно, вы можете использовать keyPressed () и keyReleased () и отслеживать, какие клавиши не работают, и выполнять действия только во время keyReleased ().

...