添加到Int值之间的延迟

问题描述:

当您在我的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(); 
    } 
} 

但我不喜欢这个,因为它变得杂乱,我不认为这是非常有效的。

有什么建议吗?

仅在当前按Enter键但在最后一帧未按下时增加。引入一个临时变量。

请注意,这不会自动重复。

boolean lastEnter = false; 

.... 

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

谢谢,这就是我要使用的。 :) – sparklyllama

try { //线程睡眠1000毫秒 Thread.sleep(30); (例外e){ System.out.println(e); }

+0

这会冻结整个游戏的时间。不管怎么说,还是要谢谢你! – sparklyllama

+0

@sparklyllama难道你没有几个线程? – Joffrey

您可以设置Timer并在500ms之后增加数组索引。

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

你的经过时间计数器是做这种事情的更好的方法之一。它看起来有点乱,但修复这个简单方法是将其打包为一般类,以便重新使用代码。

+0

或者,使用全局当前时间并每隔一帧更新一次。然后,给所有AI和GUI功能增加时间。您的输入按压方法累计增量时间,直到它超过500,然后在下一次应该减少的时候减去500。 –