2013-05-29 2 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

Привет :) Прежде всего, спасибо за ответ, но он не сработал, я попытался использовать это, но заменил if для случая. И ничего не изменилось:/ Вот код: http://pastebin.com/5dtXTQwQ –

+0

Привет, код не компилировался, он не конкурирует, но я обновил код выше с вашей адаптацией, и он работает здесь ... Может быть, я не понимаю, в чем твоя проблема ... –

+0

Это сработало отлично :). И да, мой код был незавершенным; Настоящая проблема заключалась в следующем: После того, как я выполнил действие, я написал Key [NameKey] = false, поэтому я был как «двойная фальсификация», потому что KeyRelesead делал это для меня. Спасибо: D –

Смежные вопросы