-1

コンピューターだけで遊ぶゲームデモを作っていますが、速すぎます。私はすべての動きを示すためにそれが必要です。

プログラムはwhileループを使用し、イベントリスナーをサポートするものは何もありません。それはただ動きをするためにコンピュータを必要とします。

4

3 に答える 3

3

移動をトリガーし、移動間で適切に待機するバックグラウンド タスクを設定できます。何かのようなもの:

Runnable moveTask = new Runnable () {
    public void run() {
        while (true) {
            Thread.sleep(...);
            SwingUtilities.invokeLater(theActualMoveHere());
        }
    }
}
new Thread(moveTask).start();

(割り込みを介して)停止メカニズムを追加し、おそらくロジックを洗練する必要がありますが、基本的な考え方はうまくいくはずです。

スリープする代わりに、たとえば x ミリ秒ごとにタイマーを使用して移動をスケジュールすることもできます。Timer の分解能はあまり良くなく、場合によっては 30 ミリ秒程度になる可能性があるため、必要な精度が得られない可能性があることに注意してください。

于 2013-02-01T08:02:48.253 に答える
0

スレッドスリープメソッドを使用して、X 時間待機できます。次のようなもの:

Thread.sleep(4000);

http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.htmlを参照してください。

1 秒あたり特定の回数ループする必要がある場合は、各反復で使用された時間を計算してから、必要な時間をスリープすることができます。例えば:

boolean cont = true;
long time0, timeForEach = 1000, time1 = System.currentTimeMillis();
while (cont) {

// Do my things here.

time0 = System.currentTimeMillis();
try {
  if (timeForEach > time0-time1) {
    Thread.sleep(timeForEach - (time0-time1));
  }
} catch (InterruptedException e) {
}
time1 = time0;

}

于 2013-02-01T08:04:16.520 に答える
0

コード内で速度を落としたいときは、通常、タイマー、スリープ、または待機関数を使用します。おそらく、すべての移動またはそのようなものに対して反復/ループ(for、while、for inなど)する関数があるでしょう。このようなループの各反復の間に時間を入れることができます。

もう 1 つの戦術は、エンド ユーザーに表示する前に、コンピューターにすべての動きを生成させることです。次に、すべての動きをユーザーに表示するときに、1 つの動きに費やされた時間を決定できます。

于 2013-02-01T08:06:11.137 に答える