当你在我的Java游戏中与NPC人交谈时,屏幕上会出现NPC的字符串数组。按ENTER将向currentMessage
整数添加一个,前进到下一条消息。但是,如果我有这样的事情:
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();
}
}
但我不喜欢这个,因为它变得凌乱,我觉得它不是很有效。
有什么建议吗?
答案 0 :(得分:1)
仅在当前按下Enter时增加,但在最后一帧中未按下Enter。引入一个临时变量。
请注意,这不会自动重复。
boolean lastEnter = false;
....
boolean enter = KeyInput.currentKey(KeyInput.ENTER);
if(enter && !lastEnter) {
currentMessage++;
}
lastEnter = enter;
答案 1 :(得分:0)
尝试{ //线程休眠1000毫秒 了Thread.sleep(30); } catch(例外e){ 的System.out.println(E); }
答案 2 :(得分:0)
您可以设置Timer
并在500ms之后增加数组索引。
Timer t = new Timer();
t.schedule(new TimerTask()
{
@Override
public void run()
{
currentMessage++;
}
}, 500);
答案 3 :(得分:0)
你的经过时间计数器是做这类事情的更好方法之一。它看起来有点乱,但解决这个问题的简单方法是将其打包为一般类,以便重新使用代码。