2011-10-18 2 views
3

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

Любые предложения?

Спасибо.

ответ

4

Создать массив. Назначьте числовое значение каждой проверкой ключа, затем включите или отключите соответствующее значение в массиве всякий раз, когда клавиша нажата или отпущена. Затем в 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 
1

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

2

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

var arrKeys = []; 

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

function zone_keyReleased(event) { 
    arrKeys = []; 
} 
Смежные вопросы