Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 04:18

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Jul 27, 2008 15:06 
Offline
DGL Member

Registriert: Di Mai 27, 2008 17:07
Beiträge: 21
Hallo,
ich mach einfach mal nen neuen Thread auf, bevor in dem anderen die Übersicht verloren geht.

Also:
Ich habe eine Spielfigur, die kann sich drehen und dann in die jeweils ausgerichtete Richtung fliegen.

Je mehr zeug ich dem Level adde, desto langsamer fliegt die Figur. Ändere ich ihre Geschwindigkeitsvektoren, wird sie wieder schneller.

Anscheinend soll man das ganze ja mit diesem Time Based Movement lösen, doch: Die Drehung der Spielfigur, bzw. die Geschwindigkeit der Drehung lässt sich gar nicht ändern, da ich da ja keinen Vektor habe sondern nur Gradangaben.

Kapiere irgendwie nicht, wie ich das gescheit hinbiegen muss :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 27, 2008 16:12 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Es ist nicht wichtig, ob du Vektoren oder Grad angaben hast.

Winkel = Winkel + Winkelgeschwindigkeit * dt

Ort = Ort + Geschwindigkeit * dt


Ist beides das selbe Prinzip. Das "* dt" bedeutet so etwas wie "pro Sekunde". Wenn du als Winkelgeschwindigkeit also 360 nimmst, sollte eine 360° Drehung in einer Sekunde erfolgen wenn ich mich jetzt nicht irre.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 27, 2008 16:25 
Offline
DGL Member

Registriert: Di Mai 27, 2008 17:07
Beiträge: 21
Stimmt, mit pro sekunde geht es, vielen dank, juhu :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 27, 2008 23:05 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Sispi: Hattest du dir das Timebased_Movement im Wiki durchgelesen? Ich frage, weil wir unsere Artikel ja immer besser machen wollen. Falls es irgendwo Verständnisprobleme gibt -> bitte sagen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2008 15:55 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Den Artikel könnte man noch um nen paar Kleinigkeiten ergänzen:
* Frameratenlimitter nach oben, damit das Spiel auf sehr schnellen Rechnern nicht unnötzig CPU frisst. Außerdem werden bei zu kleinen Zeitdifferenzen Probleme mit der floatingpoint Genauigkeit relevant.
* Begrenzung der Zeitdifferenz, damit keine riesigen Zeitsprünge durchgeführt werden könne. 100ms=10fps sind hier ein guter Wert.
* Der letze Quellcode ist was die Zeitmessung angeht nicht mit den vorherigen konsistent, da er nur die Zeit innerhalb des Idle Handlers misst, und nicht die Zeit zwischen zwei aufrufen. Imo ist die Zeit zwischen Zwei aufrufen besser.

Der Variablenname "BerechnungsZeit" ist imo auch ungünstig gewählt. "VorherigeZeit" wäre besser, da BerechnungsZeit sich für mich nach der Zeitdifferenz anhört.

Außerdem könnte man darauf hinweisen dass QueryPerformanceCounter auf manchen Boards mit MehrkernCPU Sprünge macht. Da hatten wir afaik schon Threads dazu. Es gibt auch einen MSDN-Artikel der empfiehlt das Ergebnis von QueryPerformanceCounter mit GetTickCount abzugleichen.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2008 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
The-Winner hat geschrieben:
* Begrenzung der Zeitdifferenz, damit keine riesigen Zeitsprünge durchgeführt werden könne. 100ms=10fps sind hier ein guter Wert.
* Der letze Quellcode ist was die Zeitmessung angeht nicht mit den vorherigen konsistent, da er nur die Zeit innerhalb des Idle Handlers misst, und nicht die Zeit zwischen zwei aufrufen. Imo ist die Zeit zwischen Zwei aufrufen besser.


zum Ersten: Ich denke, ein Minimallimit sozusagen, ist bei einigen Anwendungen nicht sinnvoll (muss man wenndann drauf hinweisen), das ist der Tod des Synchronisierten Ablaufes.

zum Zweiten: Zwischen zwei Aufrufen ist ganz schlecht. Denn dann kommst du sogar bei Idle manchmal schlicht und einfach auf fast 0, weil es sofort wieder aufgerufen wird. Besser ist da meiner Meinung nach das Messen von Beginn des letzten Renders bis zum Beginn des aktuellen Renders. Sodass man sozusagen einen Snapshot hat der gezeichnet wird und schon während dem Zeichnen die Zeit weiterläuft. Man kann aber auch trotzdem die zeit zwischen den Aufrufen messen und dann halt die Framerate limitieren (z.B. einfach Sleep(1); oder Sleep(10); aufrufen, wenn man auf einen entsprechend kleinen Wert kommt. Aber das musst dann auch mit in die Zeitmessung einfließen)

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2008 18:19 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Begrenzung der Zeitdifferenz ist nötig wenn du keine kontinuierliche Kollisionskontrolle hast. Und das haben die wenigsten Spiele. Notfalls muss man ein paar mal das Rendern auslassen. Auch muss man dann sehr aufpassen weil OnIdle durch einige aktionen ausgesetzt wird(z.B. offenes Menü)
Mit zwischen zwei aufrufen meine ich dass am anfang jedes frames einmal die Zeit gemessen wird. War also nur ungünstig ausgedrückt.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]