私は一般的な 2D タイル スタイルのゲームに取り組んできました。現在、私のメインスレッドには、可能な限り速く進み、ゲームのものを処理する別のクラスにある JPanel の repaint メソッドを呼び出すループがあります。次のようになります。
public class Main {
public static void main(String[] args) {
Island test = new Island();
while(true) {
test.getCanvas().requestFocus();
test.getCanvas().repaint();
}
}
}
getCanvas() は JPanel を返すだけです。
現在、これは私が望んでいたことを行いました。プレーヤーに動きを追加し始めたので、明らかに、できるだけ速く画面上でプレーヤーを動かしたくありません。そのため、Island クラスに入力マップとアクション マップがあり、キーのプレスとリリースを検出して、保持されているキーをプレーヤー クラスに通知します。次に、10 ミリ秒ごとに呼び出されるスイング タイマーを使用して、プレーヤー クラス内でプレーヤーを動かします。これは私のゲーム ティックのようなものだと思います。私のゲームは可能な限り高速にフレームを作成し、ゲームはすべてのロジックを 1 秒間に 100 回実行します。もちろん、動きだけでなく、ゲームロジックにもさらに追加します。
いくつかの調査を行った後、スイングタイマーは小さなタスクとスイングタスクを実行するように設計されているため、これを行うための最良の方法ではないようです. だから私の質問は、私のフレームを私のメインメソッドのようにするのは賢明ですか、そして私のゲームを10ミリ秒ごとに確実に刻む良い方法は何でしょうか? ゲームロジックを処理する新しいスレッドを作成し、 System.getnanotime またはそれが呼び出されたものを使用して、ティックを実行するのにかかる時間を測定してから、わずかな thread.sleep を実行する必要があるなど、いくつかのアイデアがありました。 10 ミリ秒に達するまで長く、それから繰り返します。
必要に応じて、より多くのコードを投稿させていただきます:)、事前に感謝します。