2013-05-29 57 views
0

我正在编写正在处理的游戏,但我遇到以下问题: 当我按左箭头键时,字符向左移动。但是如果我按住键,然后按下左箭头键时按下跳跃(向上箭头键),当角色到达地面时停止移动。 发生这种情况是因为某种程度上,处理在您按下另一个按钮后会停止获取按下的按键。 无论如何要解决这个问题?正在处理 - 正在处理键

+0

语言?......平台?......等等...... –

+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; 
    } 
} 
+0

嗨:) 首先感谢你的答案,但它没有奏效,我试图使用这个,但取代如果案件。并没有什么改变:/ 继承人代码: http://pastebin.com/5dtXTQwQ –

+0

嗨,代码没有编译,它没有竞争,但我更新了上面的代码与你的改编,它在这里工作...也许我没有得到什么是你的问题... –

+0

它工作完美:)。是的,我的代码不完整,p。 真正的问题是: 当我执行操作后,我正在写Key [NameKey] = false,所以我就像是“double falsifying”,因为KeyRelesead正在为我做。 谢谢:D –