簡體   English   中英

Java:如何在X秒后計算簡單事件的時間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM