コンピューターだけで遊ぶゲームデモを作っていますが、速すぎます。私はすべての動きを示すためにそれが必要です。
プログラムはwhileループを使用し、イベントリスナーをサポートするものは何もありません。それはただ動きをするためにコンピュータを必要とします。
移動をトリガーし、移動間で適切に待機するバックグラウンド タスクを設定できます。何かのようなもの:
Runnable moveTask = new Runnable () {
public void run() {
while (true) {
Thread.sleep(...);
SwingUtilities.invokeLater(theActualMoveHere());
}
}
}
new Thread(moveTask).start();
(割り込みを介して)停止メカニズムを追加し、おそらくロジックを洗練する必要がありますが、基本的な考え方はうまくいくはずです。
スリープする代わりに、たとえば x ミリ秒ごとにタイマーを使用して移動をスケジュールすることもできます。Timer の分解能はあまり良くなく、場合によっては 30 ミリ秒程度になる可能性があるため、必要な精度が得られない可能性があることに注意してください。
スレッドスリープメソッドを使用して、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;
}
コード内で速度を落としたいときは、通常、タイマー、スリープ、または待機関数を使用します。おそらく、すべての移動またはそのようなものに対して反復/ループ(for、while、for inなど)する関数があるでしょう。このようなループの各反復の間に時間を入れることができます。
もう 1 つの戦術は、エンド ユーザーに表示する前に、コンピューターにすべての動きを生成させることです。次に、すべての動きをユーザーに表示するときに、1 つの動きに費やされた時間を決定できます。