0

我正在编写一个正在处理的游戏,但我遇到了以下问题:当我按下左箭头键时,角色向左移动。但是,如果我按住键,然后在按左箭头键的同时按跳跃(向上箭头键),当角色到达地面时,他会停止移动。发生这种情况是因为在您按下另一个键后,Processing 会以某种方式停止获取按下的键。反正有办法解决吗?

4

1 回答 1

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;   
    }
} 
于 2013-05-29T13:02:09.380 回答