处理 - 获取密钥

时间:2013-05-29 01:09:07

标签: key processing

我正在处理游戏编程,但我遇到以下问题: 当我按下左箭头键时,角色向左移动。但是如果按住键然后按住左箭头键的同时按下跳跃键(向上箭头键),当角色到达地面时他会停止运动。 发生这种情况是因为在您按下另一个按钮后,处理停止获取按下的键。 无论如何要解决这个问题?

1 个答案:

答案 0 :(得分:0)

有keyTyped()但是我从来没有像参考文献中所描述的那样工作......你可以尝试一下......当按下一个键时,keyPressed()被调用一次,但是它仍然没有被调用按下。通常的方法是使用从两个调用的布尔值,keyPressed()和keyReleased()来跟踪所需的状态,如:

[EDIT2] 代码改编:

    boolean[]keys = new boolean[5];
final int A = 0;
final int W = 1;
final int S = 2;
final int D = 3;
final int R = 4;
char keyP;
PVector p;

void setup(){
  size(400,400);
  p = new PVector (width/2, height/2);
}

void draw(){

  background(255);
  ellipse ( p.x, p.y, 10, 10);
  if(keys[A]){
    p.x--;
  }
  if(keys[W]){
    p.y--;
  }
  if(keys[S]){
    p.x++;
  }
  if(keys[D]){
    p.y++;
  }
  if(keys[R]){
    println("what should I do?");
  }


}



void keyPressed() {
    keyP = key;

    switch(keyP) {
      case 'A':
      case 'a':
          keys[A] = true;
          //println("a pressionado");
          break;
      case 'W':
      case 'w':
          keys[W] = true;
          //println("w pressionado");
          break;
      case 'S':
      case 's':
          keys[S] = true;
          //println("s pressionado");
          break;
      case 'D':
      case 'd':
          keys[D] = true;
          //println("d pressionado");
          break;
      case 'R':
      case 'r': 
          keys[R] = true;
          //println("r pressionado");
          break;         
    }
}

void keyReleased(){
    keyP = key;
    switch(keyP){
      case 'A':
      case 'a':
          keys[A] = false;
          //println("a solto");
          break;
      case 'W':
      case 'w':
          keys[W] = false;
          //println("w solto");
          break;
      case 'S':
      case 's':
          keys[S] = false;
          //println("s solto");
          break;
      case 'D':
      case 'd': 
          keys[D] = false;
          //println("d solto");
          break;
      case 'R':
      case 'r': 
          keys[R] = false;
          //println("r solto");
          break;   
    }
}