JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=0d831f5f061dc12a38f432fb03604f03Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Meine Bewegungen ruckeln

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 23.06.2006, 17:56    Titel: Meine Bewegungen ruckeln Antworten mit Zitat

Hallo ich habe ein Problem!

Wenn ich ein sprite von links nach rechts laufen lass,
mit sagen wir 5.0 Pixel,
dann läufe das Sprite auf unterschiedlichen PCs unterschiedlich schnell!

Also hab ich eine sog. zeitliche Frequence eingebaut.

Code:

fFreq= float(GetTickCount()-dwTickStart) / 1000.0f;


x += 5 * (fFreq*50);


// jetzt zeichnen


// dann
dwTickStart = GetTickCount();


es ruckelt, was ich ja auch verstehen kann,
weil wenn ich mit den Wert von fFreq angucke, dann schwankt dieser
bei jedem PC enorm.

was kann ich tun , damit er nicht so schwankt oder mein Sprite sich trotzdem ruhig bewegt.

gruss Peterbub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 24.06.2006, 08:17    Titel: Antworten mit Zitat

'fFreq' muss ja von Rechner zu Rechner schwanken, das ist ja der Witz der Sache, dieser Faktor passt die Gesamtgeschwindigkeit an jeden Rechner individuell an. ;)

In der Formel ist das '*50' hinter 'fFreq' meiner Meinung nach fehl am Platz, oder vielleicht ist die Auflösung des Timers nur zu niedrig. Kannst du das "Ruckeln" mal näher umschreiben? Ruckelts denn auf jedem Rechner?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 25.06.2006, 15:14    Titel: Antworten mit Zitat

die 50 ist nur irgend ein Wert , um eine nutzbare Geschwindigkeit zu erreichen.

Den Wert fFreq

fFreq = float(GetTickCount()-dwTickStart);

kannst du die ja mal ansehen!

er ist auf jedem PC anders und schwankt immer

(bis zu 100 milli sec , hab ich bei einem meiner PCs (laptop) gesehen).

und wenn dieser Wert auf jedem PC schwankt, dann ruckelt die Bewegung

gruss peterbub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 25.06.2006, 15:29    Titel: Antworten mit Zitat

Wie gesagt, es ist völlig logisch, dass dieser Wert von Rechner zu Rechner schwankt, je schneller das System, desto kleiner wird der Wert sein. Zugegeben, die '* 50' hat keinen wesentlichen Einfluss auf das Ganze, ist nur komisch, da man die mit dem Faktor 5 zusammenfassen könnte, das hieße dann, dass sich dein Sprite/Objekt um 250 Pixel/Längeneinheiten pro Sekunde (!) bewegen wird.

Häufig entstehen Fehler und Ruckler beim Timemanagement, indem man durch solche Casts an Genauigkeit einbüßt, das wäre zumindest eine Erklärung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 25.06.2006, 16:20    Titel: Antworten mit Zitat

Timemanagement ?

kann ich beim GetTickCount() ,noch was einstellen ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 25.06.2006, 17:07    Titel: Antworten mit Zitat

Ne, ich meinte eher, dass 'float' zu ungenau sein kann:
CPP:
double freq;
...
freq = static_cast<double>(GetTickCount()-dwTickStart)/1000.0;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 25.06.2006, 17:58    Titel: Antworten mit Zitat

Wobei GetTickCount() nicht grade das präziseste ist was Zeitfunktionen angeht, besser sind dann der PerformanceTimer oder einfacher timeGetTime() (wofür afaik etwas includiert werden muss ausserdem benötigt es eine zusätzliche lib).

Was mir an deinem Codesnippet noch auffällt ist das du nach dem Zeichnen dwTickStart aktualisierst, was vermutlich einiges ausmacht.

Besser wäre es so:

CPP:
DWORD dwOldTick = dwTickStart;
dwTickStart = timeGetTime();
float deltaTime = float(dwTickStart-dwOldTick) / 1000.0f;

MechanikUpdaten(deltaTime);
Rendern();


anstatt so:


CPP:
float deltaTime = float(GetTickCount()-dwTickStart) / 1000.0f;

MechanikUpdaten(deltaTime);

dwTickStart = GetTickCount();

Rendern();


Denn stelle dir mal vor das deine Berechnungen der Spielmechanik kaum Zeit kosten im Vergleich zum rendern deiner Welt.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 25.06.2006, 18:28    Titel: Antworten mit Zitat

Stimmt, jetzt wo du es sagst, fällt es einem wie Schuppen von den Augen, scheint so, als wenn er die erste und letzte Zeile im 1. Posting vertauscht hat.

Beide Funktionen arbeiten mit einer Auflösung von 1 Millisekunde, der PerformanceCounter wäre natürlich das Optimum, dürfte aber in diesem Fall nicht die wesentliche Ursache für das Ruckeln sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum