私はJavaでゲームをプログラミングしています。メッセージ管理を追加したいと思います。まだ送信されていないすべてのメッセージを含むArrayListが存在するはずです。 2秒ごとにリストの次の項目が表示されます。Java slick;遅れてもループしないでコマンドを実行する。
私のロジック:最初のメッセージが表示されるべき更新Methodeので
。 2秒後にこのアイテムは削除されます。
私の問題は、ちょうど最初のものが表示され、他のものは表示されないということです。私がデバッグしていたとき、私はこれらの2秒後にタイマーが2秒の休憩なしに最初のアイテムを削除し続けることに気づいた。
問題を見つけたり、より良いロジックを見つけたりできますか?
私のコーディングの一部です。
MothodeはMethodeのレンダーキュー
public static void showMessage(String message){
msgHandler.addMessage(message);
}
にメッセージを入れて
public void render(GameContainer gameContainer, Graphics g) throws SlickException {
msgHandler.getCurrentMessage().displayMessage(g);
if(msgHandler.isTimerCompleted()){
msgHandler.next();
}
}
メッセージマネージャクラス
public class MessageHandler {
private ArrayList<Message> messages;
private int duration = 2000;
private Timer timer = new Timer();
private boolean isTimerCompleted = true;
public MessageHandler() {
messages = new ArrayList<>();
}
public void next() {
isTimerCompleted = false;
timer.schedule(new TimerTask() {
@Override
public void run() {
if (messages.size() > 0) {
messages.remove(0);
}
System.out.println("test");
}
}, duration);
isTimerCompleted = true;
}
public Message getCurrentMessage() {
if (messages.size() > 0)
return messages.get(0);
return new Message("");
}
public void addMessage(String message, int x, int y) {
messages.add(new Message(message, x, y));
}
public void addMessage(String message) {
messages.add(new Message(message));
}
}
私はあなたがこれを理解だと思います違う。関数が呼び出されるたびに、2秒の遅延があり、メッセージがリストから削除されます。 私の問題は、タイマーが初めて終了した後、runメソッド内のすべてが継続的に実行されるということです。ループしています。しかし、私はrunメソッドが無限ループではないことを望んでいます。 – Lorenz
こんにちは、少し具体的に私の答えを更新しました。あなたの考えを教えてください。 –
ありがとう!それは働いた! 素晴らしい一日を過ごしましょう。 – Lorenz