0

処理中のゲームをプログラミングしていますが、次の問題があります: 左矢印キーを押すと、キャラクターが左に移動します。しかし、キーを押したままにして、左矢印キーを押しながらジャンプ(上矢印キー)を押すと、キャラクターが地面に到着すると動きが止まります。これは、別のキーを押した後、何らかの理由で処理が押されたキーの取得を停止するために発生します。とにかくそれを修正する方法はありますか?

4

1 に答える 1

0

keyTyped() はありますが、リファレンスに記載されているように機能することはありません...試してみてください. これを行う通常の方法は、次のように、必要な状態を追跡するために 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 に答える