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