Java ruckeln ohne zu ruckeln?

void knight

Cadet 1st Year
Registriert
Sep. 2009
Beiträge
12
Ich programmiere (immernoch) ein Spiel (hatte ne Zeit lang geruht).
Nachdem ich dann mein Arbeitsbetriebssystem (endlich) auf Linux gewechselt hatte und mein Spiel starten wollte lief es viel zu schnell(Wer hätte damit gerechnet?!:p). Naja ist ja kein problem dann begrenzt man halt die Geschwindigkeit:
Code:
int sleeptime = 0;
        while(playinGame)
        {
            long ctm = System.currentTimeMillis();
            ...
            ctm = System.currentTimeMillis() - ctm;
            sleeptime = 20 - (int)ctm;
            try {if(sleeptime > 0)GameHandler.sleep(sleeptime);} catch(InterruptedException e) {System.err.println(e);}
        }
so sollte ja im prinzip kein Problem sein, aber...

Wenn ich es jetzt starte und den Charakter nicht bewege "ruckelt" es obwohl die Wartezeit immernoch bei 19 oder 20 Millisekunden liegt. Nur wenn ich den Charakter bewege läuft alles flüssig, wobei es dann auch schonmal die ein oder andere (für diese Runde) gleichbleibende Bewegungsrichtung gibt, bei der es auch "ruckelt".
Ruckelt ist daher in Anführungszeichen geschrieben, weil die Gegner die sich bei richtigem Ruckeln langsamer bewegen würden sich aber trotzdem noch in der gleichen Geschwindigkeit bewegen, d.h. dass sie die strecke die sie zurücklegen sollten auch zurücklegen, dies aber nicht angezeigt wird.

Ich hoffe ihr könnt mir helfen
und schonmal vielen Dank für jegliche Hilfe im Vorraus

mfg void knight
 
Zuletzt bearbeitet:
Das geht am Besten mit einem Timer. Zum Beispiel mit TimerTask und scheduleAtFixedRate:

mainThread() {
warteAufSpielende();​
}

timerThread() {
verarbeiteEingaben();
pruefeSpielende();
berechneObjektpositionen();
if (rechner == schnellGenug) {
zeichneBildschirm(); // moeglichst mit doubleBuffer​
}​
}


Durch den Timer erhält man auf unterschiedlichen Rechnern eine gleichmäßige Darstellung. Zu schnelle Rechner sind dann kein Problem mehr. Sollte der Rechner zu langsam sein, kann man an der Bildausgabe sparen. Geht das nicht mehr, läuft halt das Spiel ebenfalls langsamer.
 
Zurück
Oben