Wie erstelle ich einen Timer in Libgdx?

1 Antwort

a) Nutze eine der schedule-Überladungen der Timer-Klasse.

Beispiel:

float delay = 5f;

Timer.schedule(new Task() {
  @Override
  public void run() {
    // do something ...
  }
}), delay);

Dieser Timer würde nach einer Wartezeit von fünf Sekunden eine Aktion ausführen.

b) Eine klassische Eigenimplementation kann so aussehen:

private float delay = 1f;
private float timeInSeconds;

public void render() {
  timeInSeconds += Gdx.graphics.getRawDeltaTime();

  if (timeInSeconds > delay) {
    // do something ...
    timeInSeconds = 0;
  }
}

In diesem Fall würde eine Aktion stets nach Ablauf einer bestimmten Wartezeit (eine Sekunde) ausgeführt werden. Wenn man nicht möchte, dass die Aktion periodisch wiederholt wird, könnte man sich bspw. noch einen weiteren Flag dazuholen, der initial auf true gesetzt ist und bei der ersten Ausführung den Wert false bekommt. Die Bedingung müsste erweitert werden, dass der if-Rumpf nur betreten wird, wenn der Flag wahr ist.


Konrad105 
Beitragsersteller
 20.03.2022, 16:24

Hättest du noch eine Idee wie ich den auf meinem Gamescreen anzeigen lasse? am besten mit batch.draw(); .

regex9  20.03.2022, 17:26
@Konrad105

Die Aktionen, die je Intervall durchgeführt werden sollen, gehören an die Stellen, die ich oben mit Kommentaren gekennzeichnet habe.

Text kannst du mit einer BitmapFont zeichnen.

BitmapFont font = new BitmapFont();

Zeichenaktion:

// clear screen with white color:
Gdx.gl.glClearColor(255f, 255f, 255f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

batch.begin();
font.draw(batch, "Some text", someXPosition, someYPosition);
batch.end();