Hi!
Äh, Gernot? Könntest du mir vielleicht einen Gefallen tun?
Wie ging nochmal das Beispiel, das du mir einmal gezeigt hast, in dem sich ein "X" mit gleicher Geschwindigkeit trotz verschiedener FPS bewegt?
Könntest du mir vielleicht sagen, wo das schnell war?
Danke...
W.
Hallo
Meinst du das Timer Beispiel von mir?
Cheers
War das von dir?
Ich meine das Beispiel, das einen Timer erstellt und bei verschiedener FPS immer gleich schnell läuft...
So, oder so ähnlich...
GLG
W.
Hi WPShadow
Das mit dem Echtzeittimer?
http://www.glbasic.com/forum/viewtopic.php?id=292
Hoffe das war der. Wie steht's denn um deinen PC? Der war doch zerstört.
Hast du schon wieder einen neuen?
Schönen Abend noch.
Cheers
Hi!
Da hat mir Gernot mal ein Beispiel gezeigt, mit dem man eine gleichbleibende Bewegung simulieren kann, egal mit welcher Frame - Rate...
Ist der "Echtzeittimer" aus dem Beispiel nicht FPS - abhängig?
'--
Anbei ist mein Rechner noch immer KO...
Ich habe zwar versucht mir aus Deutschland eine Graphikkarte zu bestellen, aber keine Chance. Jetzt habe ich eine aus Graz bestellt, die vermutlich um den 26.09.2006 herum kommen sollte. Problematischerweise bin ich mir nicht sicher, wann die Karte dann tatsächlich ankommen wird. Habe mich im Endeffekt nämlich für eine ASUS X1950XTX entschieden. Riesen leistung und unglaubliche UNVERFÜGBARKEIT... :-/
Aber eines schönen Tages wird das schon...
Soweit der aktuelle Stand...
GLG
W.
BumbleBee hat daas mal gut erklärt: http://www.glbasic.com/forum/viewtopic.php?id=292. Ich kann mich erinnern, dass ich mal sowas gemacht hab' aber evtl. war das nicht im Forum, sondern im Chat?
Ja, genau! Da hast du mir mal einen Link geschickt, im Chat!!!
Aber mehr kann ich da auch nicht mehr dazu sagen...
Hallo
Quote from: WPShadowIst der "Echtzeittimer" aus dem Beispiel nicht FPS - abhängig?
Das Beispiel von mir ist FRAME UNABHÄNGIG
Darum LIMITFPS -1. -> Maximal. Full Speed
Aber wenn man eben Frameunabhängig programmieren möchte, muß man auch einen
Timer einbauen, sonst läuft das Spiel auf verschieden PCs unterschiedlich schnell.
Denn LIMITFPS -1, und in der Schleife z.B. nur X = X + 1 für die Bewegung, ohne
irgendeinen Timer das kann böse Überaschungen geben wenn man sein
Programm weitergibt. Bei einem läufts noch annehmbar, beim nächsten ist es unspielbar.
Wollt noch eins dazu sagen.
So ein Timer hat natürlich seine Vorteile. Man kann gezielt einzelne Bewegungen abbremsen
und nicht gleich das ganze Programm wie z.B.. auch ein Delay oder Sleep am Ende der Schleife.
Cheers
Hi!
Genau darum geht es mir!
Eine Frame - unabhängige Schleife mit einem Timer, bei dem die Frames rauf oder runter gehen können und die Bewegung sich entsprächend in die Richtung "fortpflanzt"...
Ca so:
FPS 30
Schritt ~ 10
FPS 60
Schritt ~ 5
Auf jeden Fall je schneller die Frame - Rate, desto genauer die Schritte und umgekehrt. Wenn nur 5 Frames sind, auch dann soll die Bewegung halbwegs flüssig aussehen, weil die Schritte eben entsprechend errechnet werden...
Gernot hatte da ein super Beispiel...
GLG
W.
Habe es nach 2 Stunden suche endlich gefunden! Hatte es doch noch auf der Festplatte...
FOR fps = 30 TO 120 STEP 30
LIMITFPS fps
x=0
WHILE x<640
PRINT "FPS: "+fps, 0,0
INC x, GETTIMER()/10
PRINT "X", x,20
SHOWSCREEN
WEND
NEXT
LIMITFPS -1
WHILE TRUE
PRINT "FPS: "+fps, 0,0
INC x, GETTIMER()/100
IF x > 500 THEN x = 500
IF x < 0 THEN x = 0
PRINT x, 50, 50
MOUSESTATE mx, my, b1, b2
IF b1 = 1 THEN x = x - 50
dtime = GETTIMER()
fps = ((1000/dtime)+fps)/2
delay=delay+dtime
IF delay>500 // 1/2 sec
delay=0
showfps=fps
ENDIF
PRINT "FPS: "+showfps+" dtime:"+dtime, 0,0
SHOWSCREEN
WEND
Ich komme da auf ca. 30 Frames pro Sekunde. Ist der Code so richtig? Habe es aus einem anderen Test rauskopiert!!!
GLG
W.
Hallo WPShadow
5 Frames die dann noch flüssig laufen? Wie geht das?
Also 1 Frame heißt 1 Bild pro Sekunde. Das kann schon mal gar nicht flüssig laufen.
Und bei 5 Frames siehst du auch die einzelnen Schritte. Das menschliche Auge
nimmt doch erst ab 18-24 Bildern pro Sekunde das ganze als flüssige Bewegung auf.
Bei Zeichentrickfilmen werden soviel ich weiß für 1 Sekunde 18 Bilder gezeichnet.
Warum? Na weil man sonst ja mehr oder weniger die einzelnen Schritte sehen würde.
Die Zeichner bräuchten dann ja bloß 1 Bild für jede Sekunde zeichnen.
Auf jeden Fall wenn du LIMITFPS 30 machst, dann läuft dein Programm nie schneller als
mit 30 Frames.
Ich dachte ja du wolltest das so NICHT. Du willst es ja nach oben hin offen. So hab ich
das damals verstanden.
Das Beispiel von mir zeigt auf meinem PC 100 FPS an. (Ist halt nicht der Neueste und Beste):(
Auf dem PC von meinem Sohn sind es 560 FPS. Der hat auch eine Radeon X800 GT drin.:good:
Aber trotzdem Konstante Geschwindigkeit der Vierecke.
Ich hab ein paar ganz gute Bücher über Spieleprogrammierung zuhause. Es steht in jedem
man sollte die Bewegung der Sprites oder was weiß ich in Abhängigkeit der verstrichenen
Zeit und nicht in Abhängigkeit der Framerate berechnen.
Tut mir leid. Vielleicht bin ich ja gerade verwirrt und verstehs nicht.
By the way
Im zweiten Beispiel stimmt die Frameanzeige nicht. :D Die zeigt immer nur die Hälfte an.
Mach mal LIMITFPS 30 dann steht bei der Ausführung oben im Screen 15 usw.
Cheers
...damit die anderen BASICs nicht so blaß daneben aussehen :D
Ok!
Ich habe wiedermal Blödsinn gebaut! Jetzt haut alles hin! Habe das Problem (glaube ich) wiedermal durch viel Schwachsinn schreiben übersehen! Wald und Bäume und so... :/
Hiermit möchte ich mich entschuldigen und verspreche, daß ich dieses Thema nie wieder angehen werde! SORRY...
GLG
W.
PS.: Auf dem Laptop meiner Freundin komme ich zwar nur auf 60 FPS, aber jetzt ist dafür alles klar! Und danke für die Hilfe...
Die 60 FPS scheinen mir die Refresh-Rate vom Monitor zu sein. Bei den OpenGL Treiber Einstellungen kann man angeben, ob er sync mit dem Monitor machen soll.
(http://img217.imageshack.us/img217/8597/zzzqw1.th.jpg) (http://img217.imageshack.us/my.php?image=zzzqw1.jpg)
Ca. 500 FPS nach Änderung in den Treibern... Kann das sein???
Quote from: WPShadowHiermit möchte ich mich entschuldigen und verspreche,
daß ich dieses Thema nie wieder angehen werde! SORRY...
Du brauchst dich nicht zu entschuldigen.
Viel wichtiger ist es, dass du deine Grafikkarte kriegst.
Das Bild kenn ich doch von irgendwo her.:D
Quote from: WPShadowCa. 500 FPS nach Änderung in den Treibern... Kann das sein???
Klar kann das sein.
Wenn die Vertikale Synchronisation aus ist, dann erfolgt das Pageflipping sofort.
Du hast mehr Frames aber das Bild kann flackern oder hat vielleicht Grafikfehler.
Oder wo hast du noch rumgeschraubt an den Treiber Einstellungen?
Cheers
Hi!
Also, ich habe die Treiber so eingestellt, daß ich sämtliche Einstellungen, die vorher auf Qualität waren, auf Leistung geändert habe. Und ich habe die "Vertikale Synchronisierung" deaktiviert. Das war das einzige, was ich machen konnte, da die Treiber für die Onboard - Karte bereits 2 Jahre alt sind und NVIDIA keine mehr aktualisiert...
Anbei wollte ich noch etwas fragen...
Dürfte ich vielleicht das kleine Programm mit den Ecken als Grundgerüst für mein "Kampfsystem" benutzen? Ich müßte es zwar etwas modifizieren, aber es wäre sehr genial...
Aber nur, wenn ich darf...
GLG
W.
PS.: Wann findet der nächste Chat statt? Würde gerne ein paar Design - Ideen diskutieren und Möglichkeiten ausdenken, wie man gewisse Dinge machen könnte. (Verspreche auch, daß ich nicht lange brauche [max. 15 min])
Freitag geht's eigentlich den ganzen Tag bis 17:00 (nebenbei ein bischen)
Hallo
Quote from: WPShadowDürfte ich vielleicht das kleine Programm mit den Ecken als Grundgerüst für mein "Kampfsystem" benutzen?
Ich müßte es zwar etwas modifizieren, aber es wäre sehr genial...
Welche Ecken meinst du? Etwa die zwei Vierecke? :D
Klar doch, wenn du die meinst.
Cheers
// --------------------------------- //
// Project:
// Start: Tuesday, September 12, 2006
// IDE Version: 3.251
LIMITFPS -1 //Maximal
Old_Timer=GETTIMERALL()
Ship1_Speed_X = 100 // Schiffgeschwindigkeit1 = 100 Pixel PRO SEKUNDE
Ship1_Color=RGB(255,0,0) // Schiff1 = Rot
Ship1_X=-30 // StarPosition Schiff 1 genau am Rand
Ship2_Speed_X = 100 // Schiffgeschwindigkeit2 = 100 Pixel PRO SEKUNDE
Ship2_Color=RGB(0,0,255) // Schiff2 = Blau
Ship2_X=-30 // StarPosition Schiff 2 ganau am Rand
GETSCREENSIZE Width,Height // Bildschirmgröße abfragen
//Spielschleife
WHILE TRUE
//GAMETIMER
//+++++++++++++++++++++++++++++++++++
GT=(GETTIMERALL()-Old_Timer)/1000
Old_Timer=GETTIMERALL()
//+++++++++++++++++++++++++++++++++++
//Raumschiff bewegen
Ship1_X = Ship1_X + Ship1_Speed_X * GT
//Nach der Bildschirmhälfte plötzlich langsamer
IF Ship1_X > Width/2 THEN Ship1_Speed_X = 250
FILLRECT Ship1_X,100,Ship1_X+30,130,Ship1_Color
//Raumschiff bewegen
Ship2_X = Ship2_X + Ship2_Speed_X * GT
FILLRECT Ship2_X,200,Ship2_X+30,230,Ship2_Color
//Hier ist noch ein Timer der die Frames und die Sekunde mißt
//****************************************************
Frames=Frames+1
IF TimeStart + 10 FPS=Frames
Frames=0
//Solange Blaues Schiff nicht Rechts angekommen ist Zeit messen
IF Ship2_X < Width
Time=Time+0.01
ENDIF
Energie = Energie + ((Time / Time) * 1.8)
IF Energie > 500 THEN Energie = 500
TimeStart=GETTIMERALL()
ENDIF
PRINT "FPS " + FPS,20,20
PRINT "Time " + Time,20,50
FILLRECT 0, 70, 0 + Energie, 80, RGB (255, 0, 0)
PRINT Energie, 0, 72
//****************************************************
SHOWSCREEN
WEND
Ich habe die TIME geändert (auf Hundertstel) und wollte noch nachfragen, wie man denn os auf die richtige FPS - Rate kommt? Wenn ich die nämlich verhundertfache, dann bin ich doch auch nicht korrekt, oder???
GLG
W.
Hallo WPShadow
Es heißt ja FRAMES PER SECOND. Der sollte also so bleiben.
Bau doch einfach einen neuen Timer für deine Energie mit ein.
Den kannst du ja dann nach deinen Vorstellungen anpassen.
Aber nach dem Timer für die Frames. Nicht innerhalb.
//New Timer
IF NewTimer+10 Time2=Time2+0.01
Energie = Energie + ((Time2/Time2) * 1.8)
IF Energie > 500 THEN Energie = 500
NewTimer=GETTIMERALL()
ENDIF
PRINT "FPS " + FPS,20,20
PRINT "Time " + Time,20,50
FILLRECT 0, 70, 0 + Energie, 80, RGB (255, 0, 0)
PRINT Energie, 0, 72
Bin ziemlich geschafft von der Arbeit. Wenn ich Blödsinn schreibe einfach sagen.
Bin in Gedanken nämlich schon im Bett.:bed:
Cheers