2

私はJavaで遊んでいて、ゲーム内のNPCのクラスを自分で持っています。それらが別のオブジェクトと衝突すると、1 つのメソッドが呼び出されます。

public void collided_in_to(Entity ent) {

    if(ent.equals(game.player)) {
        this.speak = "Ouch!";
    }

}

私がやりたいことは、単純だと思っていましたが、一定の秒数後に設定this.speakされます。""Web のバックグラウンドから来て、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

ゲーム ループを使用している場合は、単純に 1秒の検証を通過させることができます。

于 2012-08-10T11:37:13.817 に答える
1

スレッドを検討しましたか?Thread.sleep()は、時間を計るためにかなり効果的に使用できます。

于 2012-08-10T11:33:41.890 に答える