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

안녕하세요 :) 먼저 해답을 주셔서 감사하지만 작동하지 않았습니다. 그리고 아무것도 변경되지 않았습니다 :/ Heres the code : http://pastebin.com/5dtXTQwQ –

+0

안녕하세요, 코드가 컴파일되지 않았습니다. 경쟁하지 않습니다. 그러나 위의 코드를 여러분의 수정본으로 업데이트했으며, 여기에서 작동하고 있습니다. ... 어쩌면 당신 문제가 무엇인지 모르겠군요 ... –

+0

완벽하게 작동했습니다 :). 그리고 네, 제 코드는 완성되지 않았습니다; 진짜 문제는 : 내가 Key [NameKey] = false를 쓰고 있었기 때문에 KeyRelesead가 나를 위해 그것을하고 있었기 때문에 "double falsifying"과 같았습니다. 감사합니다. D –