LoginSignup
22
13

More than 3 years have passed since last update.

Processing でキーの同時押し

Last updated at Posted at 2017-10-11

方法

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 型)に格納されるのでもう一工夫要ります。

22
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
13