[英]Java: How can I time simple events to happen after X seconds?
我正在玩Java,我在游戏中为自己的NPC上课。 当一个方法与另一个对象发生碰撞时会调用它们:
public void collided_in_to(Entity ent) {
if(ent.equals(game.player)) {
this.speak = "Ouch!";
}
}
我想做的事情,我认为很简单,在给定的秒数之后将this.speak
设置为""
。 来自网络背景,我正在寻找相当于Javascripts setTimeout()
。
我已经尝试过使用各种计时器片段,比如使用Swing计时器,但在这种情况下,似乎每个计时器都会调用相同的public void actionPerformed(ActionEvent e)
方法,因此对于不同的事件我有多个计时器我没办法区分它们。 其他人使用内联匿名类,但后来我无法将非最终参数传递给它。
对于这个用例,我是否缺少一些东西,我希望在一段时间后发生非常小的简单事情? (称为实例方法,变量集等)
谢谢!
写你自己的简单计时器怎么样? 我会想到这样的事情:
public class Timer {
long start = 0;
long delay;
public Timer(long delay) {
this.delay = delay;
}
public void start() {
this.start = System.currentTimeMillis();
}
public boolean isExpired() {
return (System.currentTimeMillis() - this.start) > this.delay;
}
}
然后将Timer类实例化为类成员,并在想要启动计时器时调用start()。
在你的方法中你打电话
public void collided_in_to(Entity ent) {
if(ent.equals(game.player)) {
if(this.timer.isExpired()) this.speak = "";
else this.speak = "Ouch!";
}
}
如果你正在使用游戏循环,你可以简单地通过一秒钟验证 。
你考虑过线程吗? Thread.sleep()可以相当有效地用于计时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.