BASIC

Author Topic: Frameunabhängig bewegen.  (Read 3656 times)

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1056
    • View Profile
    • http://www.deuteriumoxid.com
Frameunabhängig bewegen.
« on: 2007-Mar-04 »
Hi, es ist ja nicht schlecht wenn man die Frames auf 60Hz begrenzt und so seine Spieler bewegung abstimmt,
aber was ist wen bei einem das Spiel nur 30 oder 20 Frames läuft?
Hier muss man die bewegung Frameunabhängig Steuern.

GLBasic hat hierfür eine sehr gute Function, GETTIMER()
Die gibt die zeit an von Showscreen bis zum nächsten und das können wir hierfür sehr gut nutzen.

Hier mal ein Beispiel Code wie es aussehen könnte.
Das Quadrat braucht etwas über 15sec. von einem Bildschirmrand bis zum andern.
Dabei spielt es keine rolle ob mit 20 FPS oder mit 500 FPS.

Code: GLBasic [Select]
// --------------------------------- //
// Project: Frameunabhängig bewegen
// Start: Sunday, March 04, 2007
// IDE Version: 4.114


LIMITFPS 20  /// hier mal werte ändern, -1 = Vsync Off

WHILE TRUE
        move = GETTIMER()
        time = GETTIMERALL()
        //-------------
        IF (time - temp) > 1000
                INC a1,1 // Secundenzähler
                temp = time
        ENDIF
        //-------------


        //-----------Das ist der interesante Teil
                        x = x +(0.02 * move ) //<<<< Frameunabhängig bewegen, mal mit dem wert 0.02 rumspielen ;)
                        FILLRECT x,0,x+10,10,RGB(100,50,200)
                        IF x > 640
                         x = 0          // X zurücksetzen
                         a2 = a1        // Für die zeitmessung
                         a1 = 0
                        ENDIF
        //---------------------------------------


// Das ist nur für die ausgabe
        PRINT getfps()+" Frames",10,100
        PRINT move+" millisec." ,10,120
        PRINT a2+" Secunden vergangen",10,140
SHOWSCREEN
WEND




FUNCTION getfps:

STATIC fps_time,fps_counter,fps,fps_temp
        fps_time = GETTIMERALL()
        fps_counter = fps_counter + 1
                IF (fps_time-fps_temp)>1000
                                fps_temp = fps_time
                                fps = fps_counter
                                fps_counter = 0
                ENDIF

                RETURN fps
ENDFUNCTION
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Offline BumbleBee

  • Global Moderator
  • Prof. Inline
  • *******
  • Posts: 891
    • View Profile
Frameunabhängig bewegen.
« Reply #1 on: 2007-Mar-04 »
Hi

Sehr gut.
Im englischen Forum hab ich auch mal ein paar Timer-Beispiele dazu gemacht.:D
  http://www.glbasic.com/forum/viewtopic.php?id=531

Schreibs halt da auch noch mit rein wenn du willst .
P.s.
Du machst echt gute Beispiele.

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1056
    • View Profile
    • http://www.deuteriumoxid.com
Frameunabhängig bewegen.
« Reply #2 on: 2007-Mar-05 »
Quote from: BumbleBee
Hi

Sehr gut.
Im englischen Forum hab ich auch mal ein paar Timer-Beispiele dazu gemacht.:D
  http://www.glbasic.com/forum/viewtopic.php?id=531

Schreibs halt da auch noch mit rein wenn du willst .
P.s.
Du machst echt gute Beispiele.

Cheers
Hi, würd ich ansich gern aber, hmmm Englisch?
Das ist fast ein Fremdword für ich :(

Werd das spätermal versuchen das ganze mit einem Tranlator zu übersetzen und dort posten.

Und, Danke. :)
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell