Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Das ist unter Windows ein SEHR schwieriges Problem weil es keine genauen Timer gibt. Desweiteren werden Events manchmal vom Betriebssystem "verzögert" so daß ein Timer auch wenn er selbst genau genug ist nicht immer gleich genau verarbeitet werden kann. Ein gutes verfahren ist es, sich für die Bewegung eine "betriebssystemunabhängige" Zeitbasis zu besorgen. Das ist z.B. Gettickcount. In der Praxis geht man dann so vor:<br>
1. Objekt zeichnen, gettickcount merken (oldcount)<br>
2. Spielschleife durchlaufen (Tasten, KI etc.)<br>
3. gettickcount holen. oldcount davon abziehen. ergibt verstrichene zeit zwischen letztem zeichnen und neuer position<br>
4. bewegungsvektor des objektes mit diesem zeitintervall multiplizieren und durch zeitbasis teilen<br>
5. objekt um bewegungsvektor verschieben<br>
6. wieder bei 1. anfangen<br>
<br>
auf diese art und weise erhält man auf allen rechnern gleich schnelle animationen. auf langsamen rechner "hüpft" das objekt größere strecken, auf schnellen rechnern legt es die gleiche strecken in der gleichen zeit nur mit mehr schritten, also "sanfter" zurück. aufpassen muß man nur bei kolisionsabfragen. (auf langsamen rechnern kann ein objekt durch ein hindernis "hindurchhüpfen"
ich habe s noch nie ausprobiert, aber siehe dir mal die API Funktionen QueryPerformanceFrequency und QueryPerformanceCount an. Vielleicht helfen diese etwas weiter.
Comment