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