framefrei bei hochzählen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

mevos

Betreff: framefrei bei hochzählen

BeitragDo, Okt 12, 2006 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Okt 12, 2006 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
size=size+schleifenzeit
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

mevos

BeitragDi, Jan 23, 2007 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 23, 2007 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 23, 2007 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 23, 2007 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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]

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jan 23, 2007 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 24, 2007 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragMi, Jan 24, 2007 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group