2014-02-25 2 views
0

Java 게임에서 NPC 담당자와 대화 할 때 NPC의 문자열 배열이 화면에 표시됩니다. ENTER를 누르면 currentMessage 정수에 1을 더하고 다음 메시지로 넘어갑니다. 그것은 그 30 회 초 확인 될 수 있기 때문에,Int 값에 추가하는 사이의 지연

if(KeyInput.currentKey(KeyInput.ENTER)) { 
    currentMessage++; 
} 

그런 다음이 연속으로 모든 메시지를 통해 진행 : 그러나, 나는 이런 식으로 뭔가가있다. 이 작업을 수행하는 동안 지연을 추가하는 가장 효과적이고 효율적인 방법은 무엇입니까?

나는이 짓을 :

long timer = System.nanoTime(); 


long elapsed = (System.nanoTime() - timer)/1000000 
if(KeyInput.currentKey(KeyInput.ENTER) { 
    if(elapsed > 500) { 
     currentMessage++; 
     timer = System.nanoTime(); 
    } 
} 

을하지만 지저분한되고 나는 그것이 매우 효율적이라고 생각하지 않기 때문에 나는 이것을 좋아하지 않는다.

제안 사항?

답변

1

Enter 키가 현재 눌려져 있지만 마지막 프레임에서는 누르지 않은 경우에만 키를 늘립니다. 임시 변수를 도입하십시오.

참고 :이 기능은 자동 반복되지 않습니다.

boolean lastEnter = false; 

.... 

boolean enter = KeyInput.currentKey(KeyInput.ENTER); 
if(enter && !lastEnter) { 
    currentMessage++; 
} 
lastEnter = enter; 
+0

고마워, 이것이 내가 사용할거야. :) – sparklyllama

0

시도 { // 1000 밀리 초 동안 대기 스레드 Thread.sleep (30); } catch (Exception e) { System.out.println (e); }

+0

이렇게하면 해당 시간 동안 전체 게임이 정지됩니다. 어쨌든 고마워! – sparklyllama

+0

@sparklyllama 여러 개의 스레드가 없습니까? – Joffrey

0

Timer을 설정하고 500ms 후 또는 그 이후에 배열 색인을 늘릴 수 있습니다.

Timer t = new Timer(); 
t.schedule(new TimerTask() 
{ 
    @Override 
    public void run() 
    { 
     currentMessage++; 
    } 
}, 500); 
0

경과 시간 카운터는 이러한 종류의 작업을 수행하는 좋은 방법 중 하나입니다. 좀 지저분 해 보일 수도 있지만 쉽게 해결할 수있는 일반적인 방법은 코드를 다시 사용할 수 있도록 일반 클래스로 패키지하는 것입니다.

+0

또는 글로벌 현재 시간을 사용하고 모든 프레임을 업데이트하십시오. 그런 다음 모든 AI 및 GUI 기능에 델타 시간을줍니다. 엔터 프레스 방식은 델타가 500을 초과 할 때까지 델타 시간을 누적 한 후 다음에 실행해야 할 시간을 위해 500을 뺍니다. –

관련 문제