Schwankende Framerate
Übersicht

ShabbYBetreff: Schwankende Framerate |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, ich bin gerade dabei ein Art kleines panzerspielchen zu schreiben, komme soweit auch gut vorran, doch habe ich ein problem das ich nicht ganz nachvollziehen kann.
Damit das programm gleichmäsig schnell läuft verwende ich frametimer=createtimer(60) waitevent(frametimer) doch wenn ich mit dem panzer über den bildschirmfahre und eine richtungstaste gedrückt halte beschleunigt das ganze spiel nach ca. einer halben sekunde ein wenig. sehr extrem wird das deutlich wenn ich die maus dabei bewege und die cursor Grafik gerendert wird... Hoffe das mir jemand weiterhelfen kann. thx im vorraus, lg Sascha |
||
![]() |
Bionical |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heißt das nicht waittimer(frametimer) ?
Und du mußt das waittimer in die hauptschleifen reingeben! |
||
Das Leben ist zum Proggen da!
www.livingsoftware.at.tc Mit selbstgehosteten Forum! Das Forum ist leider gerade down.... Dank Funpic.de -.- |
ShabbY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Waittimer funktioniert nur bei Blitz2D und 3D. Da ich mit Blitzplus arbeite muss ich mit Waitevent arbeiten. Ich habe die Art und Weise es anzuwenden nicht fehlverstanden und es funktioniert "eigentlich" auch, doch wenn ich zum beispiel wärend ich mit dem Panzer fahre die die mause bewege, und das crosshair dargestellt werden muss sollte dies auch max z.b. 60 mal pro sekunde passieren, wenn das so bei createtimer angegeben wurde. das ist aber nicht der fall. Sobald ich die maus bewege beschleunigt sich das ganze spiel.
Falls ein fehler mit Createtimer/waitevent vorliegen sollte, was ich nicht glaube hier der code: Code: [AUSKLAPPEN] frameTimer=CreateTimer(100)
IntroScreen() ;InitScreen() InitTank() InitTower(50,50) Repeat TankPos() DrawTank() Drawbullet() ;MouseShot() StatusBar() checktower() ;drawcrosshair() Flip WaitEvent (frametimer) Until KeyDown(1) TerminateProgram() |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ShabbY,
du hast etwas falsch verstanden ![]() WaitEvent ist für Fensteranwendung mit Windows-GUI gemacht (buttons, textfields und so). WaitEvent wartet, bis du z.B einen Button klickst, eine Taste betätigst, oder so.... WaitEvent hat zusätzlich einen Parameter, mit welchem man angibt, wie lange der PC, auf einen solchen Event warten soll.... du hast bei diesem Parameter die Variable frameTimer eingesetzt, die wahrscheinlcih so den wert 1234567 hat... Da ist es kein wunder, wenn es stockungen gibt.... Du musst also WaitTimer verwenden, das dieser Befehl diese Probleme beheben wird.... ![]() cu simi |
||
ShabbY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
naja ich habes es eben nochmal mit Waittimer() versucht, fazit war, dass mir der complier gesagt hat "Function 'waittimer' not found".
auf blitzbase steht auch das Waittimer (http://www.blitzbase.de/befehlegui/waittimer.htm) bei blitzpkus nicht mehr zu verwenden ist. desweiteren funktioniert waitevent in sofern, das wenn ich die framerate auf 20 stelle läuft das spiel mit 20 fps, halt eben nur so lange wie ich irgendeine Taste nicht gedrückt halte oder wenn ich die das crosshair mit dem cursor bewege, dann beschleunigt das spiel wieder. Leider liegts nich daran, dass Waitevent verwendet wird. hoffentlich gibts noch andere votschläge, danke schonmal für die bisherigen. greetz ShabbY |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na, ist klar warum das beschleunigt
Wie von Simi gesagt, hast du den Parameter falsch verstanden. Er wartet bei dir trotzdem auf IRGENDEIN Event, nicht auf das des Timers. Ein Event ist z.B. auch ein Tastendruck. Wenn du nun die ganze Zeit eine Taste drückst, wartet der nicht mehr auf den Timer (der vorher als einziges ein Event ausgelöst hat), das Spiel läuft also schneller. Du musst also den Rückgabewert von Waitevent auswerten und nur dann weitermachen, wenn das Event von dem Timer kommt. |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
ShabbY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, danke.
Jetzt weiss ich zumindest schonmal wie das problem zu stande kommt. nur bei der problem lösung hab ich grad noch n problem. die unterscheindung der events sollte ja nicht das problem werden, aber was soll ich als masnahme für den fall der event nicht gewünschte ist machen. sprich Code: [AUSKLAPPEN] createtimer() Repeat If Eventsource()<>21305784 Then WaitEvent () Else [b]???[/b] EndIf Until KeyDown(1) |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Code: [AUSKLAPPEN] Version 1.34 (BlitzPlus)
Änderungen WaitTimer, FontWidth, StringHeight sind wieder da. Da du wahrscheinlich die Demo hast, wird der Befehl nicht wider ( ![]() Ich würds mit WaitEvent so lösen (irgendwo am Schluss einfügen): Code: [AUSKLAPPEN] Repeat
until WaitEvent()=$4001 cu simi |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Waittimer kann mann aber auch mit BB selber schreiben!BlitzBasic: [AUSKLAPPEN] ;waittimer einfach in die Hauptschleife packen! Und das BlitzBasic: [AUSKLAPPEN] Flip 0nicht vergessen Und falls es erforderlich sein sollte..BlitzBasic: [AUSKLAPPEN] Global frametimer |
||
[BB2D | BB3D | BB+]
|
ShabbY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke ![]() Code: [AUSKLAPPEN] Repeat
until WaitEvent()=$4001 hat gleich funktioniert ![]() danke für die hilfe und auch für die anderen tips :>[/code] |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group