Stockelproblem nicht gelöst
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß nicht ob nur Blitz das Problem hat, das 'ql:VWait' das System komplett lahm legt, aber so ein Systemrecourcenkiller sollte man meiden. Tatsächlich habe ich zu der Zeit selber es noch nicht so genau gewusst und wollte mich schon auf die Suche nach den alten Beiträgen machen, um Korrekturen darin zu machen. Wie man sieht, habe ich es noch nicht getan.
Mein Satz müsste also nun so heissen: Zitat: Eine Geschwindigkeitsskallierung mit MilliSecs ist auch bei 'Flip 0' ausreichend genau, man sollte aber noch ein Timer einbauen. Alle die sich VSync Treibermässig ausschalten wissen trotzdem überhaupt nicht was die da tun, da viele Spiele garkeine Bremse haben und das System dann unnützige FPS rumschleudert die man eh nicht sehen kann.
Meine Empfehlung jetzt: Nutze 'Flip 0' und dazu gleich WaitTimer. Du kannst dir aber auch einen Timer selber basteln, wie Markus2 es bereits als Beispiel nannte. Ich selber sehe aber keinen Vorteil zu einem eigenen Timer als dem der von Blitz mitgeliefert wird. Tatsächlich lieferte mir ein selbstgebastelter Timer sogar stärker schwankende Frameraten, als WaitTimer. Dieses scheint aber, wie so vieles, von System zu System unterschiedlich zu sein. Warum nun 'Flip 1' bei dir stockelt liegt meiner Vermutung nach daran, dass dein Programm sehr nahe deiner Bildschirmfrequenz kommt. Wird hier und da dann mal etwas mehr berechnet, gehen die FPS leicht unter der Bildschirmfrequenz was bedeutet, dass ab dem Frame an, fast ein ganzes Frame lang gewartet wird. Dieser Abfall kommt dann gleich mit einer Reduzierung auf 50% um dann später wieder mit einem Frame auf 100% zu gehen. Mit 'Flip 0' sind nahe der Bildschirmfrequenz liegende Systemleistungen kaum mehr sichtbar, als ein leichter 'Balken' der mal hoch oder runter über den Bildschirm wandert. Der Balken kann auch nur gesehen werden, wenn große Objekte sich seitlich bewegen (in 3D zB Kameraschwenks nach links oder rechts). Bei Flachbildschirmen kann der Bildaufbau wieder ganz anders verlaufen, wo dann wieder ganz andere Phänomene auftretten. Da nun dieses Thema bereits schon hiesig disskutiert wurde, du aber dich augenscheinlich bereits der Suche bemüht hast, kann ich dir folgende Tipps geben: - Arbeite mit Flip 0 - Nutze dabei ein Frametimer (wichtig) - Lasse den User die Framerate einstellen, oder berechne selber aus der aktuellen Bildschirmfrequenz den idealen Framewert - Wenn Framerate unterschiedlich sein kann (Usereinstellungen oder berechnet), so muss Frameunabhängig programmiert werden. Also eine Bewegungsskallierung auf Geschwindigkeit und Beschleunigung (teilweise nur schwer bei Physikalischen Spielen anzuwenden) - Bete, dass sich keine User über komische Darstellung beschweren edit1: Sorry, du hast ja garnicht das Stockelproblem mit 'Flip 1' sondern 'Flip 0'. In diesem Fall kann ich mir nicht genau erklären, was für ein Problem das sein soll. Denn ich bin mit meinen Spielen auch nicht mehr so zufrieden, wie zu Zeiten wo ich 'Flip 1' nutzte, dafür aber das System komplett lahm war. Tatsächlich ist die Ausgabequalität mit nichts besser zu machen als 'Flip 1', welches man aber nicht nutzen sollte. ![]() edit2: Im übrigen ist eine Kombination auf 'Flip 0' und ql:VWait auch nicht besser, als gleich 'Flip 1' zu nuten. |
||
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achtung mein letzter Post war falsch! Wie Hectic schon bemerkt hatte sollte es eigentlich heißen:
Wenn das stimmt ist mein Programm Schwachsinn mit Flip 0 Und mit Flip 1 ist der PC zu lahm, mit Waittimer wird der PC ausgebremst und mit Flip 0 stockelt es. hectic hat Folgendes geschrieben: - berechne selber aus der aktuellen Bildschirmfrequenz den idealen Framewert.
Das scheint mir noch die einzige Lösung zu sein. Wie mache ich das? ~Edit1 Hab bei mir ne Frequenz gefunden mit ders bei mir flüssig läuft (150). Wenn ich jetzt ne Exe mach läufts bei anderen PC's nichtmehr flüssig oder? ~Edit2 Wenn der User einen Langsamen PC hat läuft das Spiel doch viel langsamer wenn man Waittimer verwendet oder? also wenn ich die Framerate runterstell läufts langsamer und wenn die Ideale Framerate für einen langsamen PC errechnet wird ist diese niedrig und das Programm läuft zu langsam. Stimmt das ? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Probier mal dein Game auf den Wert zu stellen, welches folgendes Programm dir ausgibt:
Code: [AUSKLAPPEN] Graphics 640,480,0,2
SetBuffer BackBuffer() Delay 500 ms=MilliSecs() While (MilliSecs()-ms)<2000 fps=fps+1 VWait Wend fps=fps/2 Print fps+" FPS" WaitKey End Auch dann, wenn treibermässig das warten deaktiviert ist, sollten auch bei Vollbild genaue Werte geliefert werden! - Delay 500 soll dem Rechner genügend Zeit geben, die Grafikeinstellungen vorzunehmen. - 2000 ms soll Rundungsfehler beheben oder zumindest minimieren. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da kommen Werte zwischen 3800 und 3000 raus (jedes mal anders wenn ich es starte).
Und das soll ich bei meinem Createtimer eingeben? Sorry aber das macht doch keinen Sinn mit so hohen Zahlen. |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, bei mir wird bei 'Flip 1' nur in der 'hohe Qualität' -Darstellung auf VSync gewartet. Bei den übrigen Treibereinstellungen wird nicht gewartet. Nur VWait erzwingt bei mir immer ein VSync (egal welche Treibereinstellung vorgegeben ist), wo ich von ausgegangen bin, dass es überall so ist. Ansonsten wüsste ich nun nicht, wofür man sonst den Befehl brauchen könnte.
Mit den hohen Zahlen hast du natürlich Recht. Ich kann dir dann nur noch raten, einen 'Standardwert' festzulegen. Oder den User bestimmen zu lassen, welchen FPS-Wert er haben möchte. Die meisten User wissen schon worum es da geht und können halbwegs sinnvolle Werte für sich da einstellen. Alle die, die keine Ahnung davon haben, nörgeln meistens dann auch nicht über geflimmer und ähnlichem. edit1: Je mehr ich darüber nachdenke, umso mehr bekommen ich soooon Hals über die ganze Sache. Es ist schon schlimm genug, dass die ersten Grafikkartenhersteller sich die 'tolle' Idee einfallen liessen, treibermässig den VSync zu deaktivieren, was nur zu Problemen führte bei Spielen die keine Bremse eingebaut haben, was wiederrum in früheren Zeiten ganz normal war wo man als Programmierer eben selbst sich ein Grafikmodus basteln musste und so die volle Kontrolle hatte. Jetzt aber auch noch wirklich jede art von Möglichkeiten überhaupt ein VSync abzufangen komplett zu deaktivieren alá 'VSync=Ever True' ist ein Unding. Ist vergleichbar mit, wenn Autohersteller anfangen würden die Drehzahlbegrenzer abzubauen, damit ihre Autos dann wieder 10km/h schneller fahren können, was sich besser verkaufen lässt. Dass dann die Autos reihenweise Motorplatzer bekommen, interessiert erstmal niemanden 'Hauptsache verkauft'. |
||
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
OK dann bleibt mir eigentlich nur übrig einen Standardwert festzulegen weil wenn der User die Anzahl der Frames ändern kann verändert er gleichzeitig die Geschwindigkeit und manipuliert so das Spiel.
Vielen Dank für deine Ratschläge und erklärungen! an die Anderen natürlich auch vielen Dank! |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group