添加到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;
try { //线程睡眠1000毫秒 Thread.sleep(30); (例外e){ System.out.println(e); }
这会冻结整个游戏的时间。不管怎么说,还是要谢谢你! – sparklyllama
@sparklyllama难道你没有几个线程? – Joffrey
您可以设置Timer
并在500ms之后增加数组索引。
Timer t = new Timer();
t.schedule(new TimerTask()
{
@Override
public void run()
{
currentMessage++;
}
}, 500);
你的经过时间计数器是做这种事情的更好的方法之一。它看起来有点乱,但修复这个简单方法是将其打包为一般类,以便重新使用代码。
或者,使用全局当前时间并每隔一帧更新一次。然后,给所有AI和GUI功能增加时间。您的输入按压方法累计增量时间,直到它超过500,然后在下一次应该减少的时候减去500。 –
谢谢,这就是我要使用的。 :) – sparklyllama