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