2014-02-25 139 views
0

當您在我的Java遊戲中與NPC人交談時,屏幕上會顯示NPC的字符串陣列。按ENTER鍵將加1到currentMessage整數,前進到下一條消息。但是,如果我有這樣的事情:添加到Int值之間的延遲

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

然後它通過快速連續的所有郵件,因爲它會檢查30次。在這樣做之間添加延遲的最佳和最有效的方法是什麼?

我已經做到了這一點:

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

try { //線程睡眠1000毫秒 Thread.sleep(30); (例外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。 –