Login Register
Frontpage Code library Pastebin

FPS -riippumattomuus

Author: misthema
Added: 26. heinäkuuta 2012 kello 11.52
Edited: 20. marraskuuta 2012 kello 1.37
Category: Sovellukset

Description

FPS - riippumaton pelirunko, jossa logiikkalaskelmat ja ruudunpiirto on erotettu toisistaan. Runko on siitä pätevä, että voit hoitaa laskelmasi ja liikuttelusi ilman delta-aikaa (Delta-Time). "gameFPS" -muuttuja rajoittaa logiikka-loopissa käymistä. Esim. "gameFPS = 60" hoitaa logiikkalaskentoja 60 kertaa sekunnissa, kuten "FrameLimit 60" pakottaisi ohjelman tekemään. Mutta vaikka FPS tippuisikin mahdollisimman alhaiseksi, logiikkalooppia suoritetaan silti samaan tahtiin. Nuolet ylös ja alas lisäävät ja vähentävät pallojen määrää (määrää ei näe kuin lukuna, pallot piirtyvät päällekäin selkeyden vuoksi) Välilyönti (Space) laittaa FPS-riippumattoman logiikkalaskennan päälle ja pois (toggle). Anteeksi tämä lontoo, mutta innostuin englantisoimaan.

Code

Select all
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//-------------- CONSTANTS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Const gameFPS = 60
Const GFX_width = 1280
Const GFX_height = 720
Const GFX_fullscreen = 1
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SCREEN GFX_width, GFX_height, 32, GFX_fullscreen


//-------------- PRE-GAME SETUP -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
framePeriod = 1000 / gameFPS 
frameTime = Timer() - framePeriod 
oldtime = Timer()

Global balls
balls = 50


Type BALL
    Field x#
    Field y#
EndType

For i=0 To balls-1
    b.BALL = New( BALL )
Next i


//-------------- M A I N  L O O P -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
While Not KeyHit(1)


	// Frame limiting
	Repeat
        	frameElapsed = Timer() - frameTime
	Until frameElapsed
	frameTicks = frameElapsed / framePeriod
	frameTween# = Float ( frameElapsed Mod framePeriod ) / Float ( framePeriod )


	// Game logic loop
	For _frameLimit = 1 To frameTicks
    
	    frameTime = frameTime + framePeriod
        	
            If _frameLimit = frameTicks Then
                // When we are just about to leave
                //  this for-loop, we can do something
            EndIf


		
            // G A M E   L O G I C   L O O P   H E R E
            ' Well.. You know.. Logic..
            If fwork Then a = UpdateBalls(a+1)

	Next _frameLimit


	// Calculate FPS
	If ( frameTicks > 0 )  
		_FPS = gameFPS / frameTicks
	Else
		_FPS = gameFPS
	EndIf

        balls = Min(10000,Max(50,balls + (KeyHit(cbKeyUP) - KeyHit(cbKeyDOWN)) * 50))
    
        _text$=""
    
        If KeyHit(cbKeySPACE) Then fwork=Not fwork
    
        If Not fwork Then
            a = UpdateBalls(a+1)
            _text = "Framework not used"
        Else
            _text = "Framework in use"
        EndIf
    
        DrawBalls()
    
    
        Text 5,5,  "Framework FPS:" + _FPS
        Text 5,17, "CoolBasic FPS:"+FPS()
        Text 5,29, "Use arrow keys up and down to add or remove balls."
        Text 5,41, "Balls:"+balls
        Text 5,53, "frameTween:"+frameTween
        Text 5,77, "Press SPACE to toggle framework on/off."
        Text 5,89, _text

	
	DrawScreen


Wend

End
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Function UpdateBalls(angle)
    i=0
    For b.BALL = Each BALL
        b\x = ScreenWidth()/2 + Cos(angle+(i*90)) * 100 + (1.0 + Cos(angle*4))
        b\y = ScreenHeight()/2 - Sin(angle+(i*90)) * 100 + (1.0 - Sin(angle*4))
        i+1
    Next b
    
    If balls-i>0 Then
        For k=0 To balls-1-i
            b.BALL = New( BALL )
        Next k
    ElseIf balls-i<0 Then
        For k=0 To i-balls-1
            b.BALL = First( BALL )
            Delete b
        Next k
    EndIf
    
    Return angle
EndFunction

Function DrawBalls()
    For b.BALL = Each BALL
       Circle b\x,b\y,10
    Next b
EndFunction

Comments

No comments. You can be first!

Leave a comment

You must be logged in to comment.