Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 23.06.2006, 17:56 Titel: Meine Bewegungen ruckeln |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 24.06.2006, 08:17 Titel: |
|
|
'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 |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 25.06.2006, 15:14 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 25.06.2006, 15:29 Titel: |
|
|
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 |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 25.06.2006, 16:20 Titel: |
|
|
Timemanagement ?
kann ich beim GetTickCount() ,noch was einstellen ? |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 25.06.2006, 17:07 Titel: |
|
|
Ne, ich meinte eher, dass 'float' zu ungenau sein kann:
CPP: | double freq;
...
freq = static_cast<double>(GetTickCount()-dwTickStart)/1000.0; |
|
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 25.06.2006, 17:58 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 25.06.2006, 18:28 Titel: |
|
|
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 |
|
 |
|