方法
keyPressed 関数 / keyReleased 関数でキーごとに押されたか、離されたかを判定します。
// それぞれのキーの入力状態を格納
boolean left, right, up, down;
void keyPressed() {
if (keyCode == LEFT) left = true;
if (keyCode == RIGHT) right = true;
if (keyCode == UP) up = true;
if (keyCode == DOWN) down = true;
}
void keyReleased() {
if (keyCode == LEFT) left = false;
if (keyCode == RIGHT) right = false;
if (keyCode == UP) up = false;
if (keyCode == DOWN) down = false;
}
使い方:
void draw() {
if (left) {
/* 左キーが押されているときの処理 */
}
if (right) {
/* 右キーが押されているときの処理 */
}
if (down) {
/* 下キーが押されているときの処理 */
}
if (up) {
/* 上キーが押されているときの処理 */
}
if (up && down) {
/* 上キーと下キーが同時に押されているときの処理 */
}
}
下記のように KeyState クラスを作成して管理するとより綺麗です。
KeyState.pde
public static class KeyState {
private static final HashMap<Integer, Boolean> states = new HashMap<Integer, Boolean>();
private KeyState() {}
static void initialize() {
states.put(LEFT, false);
states.put(RIGHT, false);
states.put(UP, false);
states.put(DOWN, false);
}
public static boolean get(int code) {
return states.get(code);
}
public static void put(int code, boolean state) {
states.put(code, state);
}
}
void keyPressed() {
KeyState.put(keyCode, true);
}
void keyReleased() {
KeyState.put(keyCode, false);
}
使い方:
main.pde
void setup() {
/* ... */
KeyState.initialize();
}
void draw() {
if (KeyState.get(LEFT)) {
/* 左キーが押されているときの処理 */
}
if (KeyState.get(RIGHT)) {
/* 右キーが押されているときの処理 */
}
if (KeyState.get(UP)) {
/* 上キーが押されているときの処理 */
}
if (KeyState.get(DOWN)) {
/* 下キーが押されているときの処理 */
}
if (KeyState.get(UP) && KeyState.get(DOWN)) {
/* 上キーと下キーが同時に押されているときの処理 */
}
}
おわりに
方向キーは **keyCode(int 型)**ですが、Tab や Enter は **key(char 型)**に格納されるのでもう一工夫要ります。