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 all1 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.