Ich möchte einen Index aus einem Array nach einiger Zeit entfernen, ich will, dass es fällt, dann löschen Sie es.Verzögerung in libgdx kann nicht eingestellt werden
private final int gravity = 4;
private long lifeTime=0;
private long delay = 20000L;
public void objGravity() {
while (array.get(array.size - 1).y > 0)
array.get(array.size - 1).y -= gravity;
lifeTime = System.currentTimeMillis();
lifeTime += Gdx.graphics.getDeltaTime();
if (lifeTime > delay) {
array.removeIndex(array.size - 1);
lifeTime = 0;
}
}
Das Objekt wird von Array sofort entfernt, als gäbe es überhaupt keine Verzögerung ist, so scheint es nicht auf dem Bildschirm zu fallen nach unten.
aktualisieren
entfernt ich Zeit und so weiter. Ich habe einen Zähler hinzugefügt, um zu zählen, wie viele Objekte entfernt werden müssen, und dann mache ich eine Schleife, die array.size-1 entfernt, solange counter> 0 ist.
Nicht sicher, ob es der beste Ansatz ist, scheint wie ein Hack, aber ich möchte keine Threads auf alten Handys tun. Wenn Sie eine bessere Idee haben, teilen Sie bitte
Haben Sie gelesen, was System.currentTimeMillis() zurückgibt? .. es wird ein großer Wert sein, wie 1349333576093. Dann, Hinzufügen der Gdx.graphics.getDeltaTime() (auch, vorzugsweise verwenden Sie den Float-Delta-Wert in Ihrem Spiel/Bildschirm render() -Methode btw) - dies wird die zurückgeben Wert seit dem letzten Render-Tick (in Millisekunden), was normalerweise wie 16 ist (abhängig von Garbage Collection oder GPU-Handlings, aus meiner Erfahrung). Also im Grunde sagt Ihre Logik, wenn 1349333576093 + 16 ist größer als 20000L, geben Sie das ein, wenn Aussage - scheint nicht ideal. Für meine Projekte verwende ich Guavas Stoppuhr-Klasse, um Verzögerung zu implementieren – mcw
@mcw verdammt! habe nicht viel darüber nachgedacht, es war die akzeptierte Antwort auf stackoverflow mit 7 upvotes ich habe es genommen, was ist ein besserer weg? – Lynob
Was ist ein besserer Weg, um was zu tun? – mcw