2

我正在玩 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)方法,因此对于不同事件的多个计时器,我无法区分它们。其他人使用内联匿名类,但是我无法将非最终参数传递给它。

对于这个用例,我是否缺少一些东西,我希望在设定的时间后发生非常小的简单事情?(调用实例方法、变量集等)

谢谢!

4

3 回答 3

5

编写自己的简单计时器怎么样?我会想到这样的事情:

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!";
    }
}
于 2012-08-10T11:56:24.420 回答
2

如果您使用的是游戏循环,则只需进行几秒钟的验证即可。

于 2012-08-10T11:37:13.817 回答
1

你考虑过线程吗?Thread.sleep() 可以相当有效地用于计时。

于 2012-08-10T11:33:41.890 回答