framefrei bei hochzählen
Übersicht

mevosBetreff: framefrei bei hochzählen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo,
ich hab mich schon ausführlich mit dem Thema "framefreies programmieren" beschäftigt. Mit meinem code kann ich dann zb. alle MoveEntity befehle mit frametime_sec multiplizieren.. läuft auch alles wunderbar. Nur wie mach ich dass wenn ich hochzähle? zb in jedem schleifendurchgang size=size+1 mache. je nach system arbeitet das ein rechner ja auch unterschiedlich schnell ab. wie könnte ich das in so einem fall machen? |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
size=size+schleifenzeit | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
mevos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das thema ist zwar schon etwas älter, dennoch habe ich wieder eine frage zu der antwort von Goodjee.
Zitat: size=size+schleifenzeit
die schleifenzeit beträgt in meinem fall 0.0011 biss 0.0020 das bedeutet dass in jedem durchgang 0.0011 biss max 0.0020 dazuaddiert werden. Ist das nun framefrei? ich möchte einfach hochzählen, aber so, dass es nicht auf jedem rechner unterschiedlich schnell gezählt wird. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Probiers doch mit einem ganz anderen System:
Code: [AUSKLAPPEN] ;Ungefähr gewünschte Framezahl fps#=50.0 fpsWait#=1000/fps While Not KeyHit(1) startT#=MilliSecs() ;irgendwas sleepingtime#=fpsWait-MilliSecs()+startT If sleepingtime>2 Then Delay sleepingtime Print (1000/(MilliSecs()-startT)) Wend Ist nicht die zuverlässigste Art, aber in der Schleife kann man jetzt ALLES machen (auch zählen). |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
mevos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
naja da finde ich meine methode schon besser, da ich auf keinen fall das system abbremsen will. es sollte so schnell laufen wie jeder rechner es kann, nur sollten selsbtverständlich die bewegungen auf allen rechnern gleich schnell bleiben | ||
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
ganze zahlen wirst du dann nicht hochzählen können.
und sonst musst du alle zählvorgänge/schritte mit der schleifenzeit MULTIPLIZIEREN. --> size=size+(1*schleifenzeit) (ist in deinem beispiel dann ein sehr kleiner wert (kann ja geändert werden) aber auf jedem pc wird gleich schnell gezählt) |
||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, erstmal müsste es 'size=size+speed*schleifenzeit' heissen. Ansonsten würde ich den Rechner auch nicht mit unnötigen >400FPS laufen lassen, das kostet Strom, ist unsozial und verursacht unnötigen Lärm beim Gehäuse. Mein Vorschlag:
- FPS auf ~120 oder vielleicht auch max. 150 FPS zu beschränken (zB mit CreateTimer). Schneller geht eh nicht, da kein Monitor auf über 200Hz geht, und ab 100Hz für das Auge es kein Unterschied macht. Also am besten Flip 1, oder noch besser VSync einschalten, weil es einige immernoch nicht begreifen wollen und es Hardwareseitig anders einstellen. - Innerhalb diesem FPS-Bereich kann man dann Frameunabhängig programmieren, ohne das bei superschnellen Rechnern (die zZ bei der Entwicklung es noch nicht gab) zu Problemen führt. edit1: Erster Absatz nicht auf biggicekey's Beitrag bezogen. |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@mevos
und aufpassen wenn du was nach der gemessenen Schleifenzeit bewegst weil änderung(sprünge) in der Zeit andere Wege ergeben und dann kann es dir passieren das alles ruckelt . Zitat: RenderWorld [tween#] <--- The use of tweening allows you to render more than one frame per game logic update, while still keeping the display smooth. This allows you to cut down on the CPU time that would be required to update your game logic every render. Note, however, that the bottleneck in almost all 3D applications is the graphics card and the CPU time involved in updating game logic is often very little. A good alternative to render tweening is the use of a delta time, that is, moving your entities each frame depending on the time it took for the program to process and render that frame. Render tweening is quite an advanced technique, and it is not necessary to use it, so don't worry if you don't quite understand it. See the castle demo included in the mak (nickname of Mark Sibly, author of Blitz3D) directory of the Blitz3D samples section for a demonstration of render tweening. |
||
mevos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so wie ich das verstanden habe würde ein RenderWorld [tween] ausreichen? Dann wäre das multiplizieren mit jeder Bewegung der Schleifenzeit nicht mehr notwendig? | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group