January 27, 2021, 07:00:39 AM

Author Topic: AGK logical frames separated from render frames rate  (Read 597 times)

Offline Santiago

  • Sr. Member
  • ****
  • Posts: 283
  • Blitz3d
    • Indiesoft
AGK logical frames separated from render frames rate
« on: June 03, 2020, 08:37:47 PM »
Hello, I used this code very successfully in Blitz3D, to keep logical frames of a game constant, without changes in speed.

At AGK, I don't understand how to do it

If someone is interested, it is a good piece of code, but it lacks a bit of logic and attention or affection to make it work.


I am not an expert in understanding the logic of some things. I am one of those who learn by example.

My strength is trigonometry, 3D graphics, physics and mathematics!

But I swear to you that the buffers, the CORE stuff is not for me.

I am doing trial and error, trying to understand, when to use Update, Render, 2d render or 3d render, when to use swap. but I'm not being able to do it.

the help of agk, no matter how much I read it, does not get to light the lamp.




Code: [Select]



// Project: constants FPS
// Created: 2020-06-03

// show all errors
SetErrorMode(2)

// set window properties
SetWindowTitle( "constants FPS" )
SetWindowSize( 1024, 768, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window

// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 0, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts


// generate a simple way to load light or heavy scene, add more cubes to push the core
for i = 1 to 1000

cubo = createobjectbox(1,1,1)
setobjectcolor (cubo,random(1,254),random(2,244),random(3,200),random(100,255))
SetObjectTransparency(cubo,1)
a=100
SetObjectPosition(cubo,random2(-a,a),random2(-a,a),random2(-a,a))

next i

// SISTEMA DE FPS LOGICOS Y DE RENDER

Global fps_logica = 60 //;cantidad de veces que se debe repertir la logica por segundo / how many logic frame i wan per second
Global fps_render = 30 // ;cantidad de veces que quisieramos que se renderee. / how many render frame i wan per second
Global fps_start = 0 //;cuando se inicio el loop / loop millisec start
Global fps_frame //;el numero de frames que llevamos en este segundo / count frames
Global fps_last //;millisec en el que se inicio el ultimo fps / last millisec frame
Global fps = 0 //;cantidad de veces que se repitio el loop principal / frame per second main loop
Global fps_logicos = 0 //;cantidad de veces que se repitio la logica en 1 segundo / logic frames per second count
Global fps_renders = 0 //;cantidad de veces que se rendereo en un segundo / render frames per second count
Global fps_do_render    //;indica si hay que renderear / i must render?
Global fps_do_logic      //;indica si hay que procesar logica / i must do the logic?
Global fps_frame_render //;cantidad de veces que se rendereo en el ultimo segundo / count how many renders in last second
Global fps_frame_logica //;cantidad de veces que se calculo la logica en el ultimo segundo / count how many logic have in the las second
Global fps_last_millisec_logic //;ultimo milisegundo en el que se calculo la logica / when was the last logic millisecs
Global fps_last_millisec_render //;ultimo milisegundo en el que se calculo el RENDER / when was the last render millisect
Global fps_last_render_delay = 0 // ; / count how many millisecs take to render
Global fps_last_logic_delay = 0 //; / count how many millisecs take to do the logic
Global fps_step_render_per_frame //;cantidad de frames que tienen que esperar para renderear / how many steps  logic to do the render
Global fps_frame_steped //;veces que llevo haciendo la logica sin renderear

print ("this render image was make in the first and only one sync of this code")
sync()

SetPrintSize(23)

do
   
    update_fps()
If fps_do_logic = 1 Then logica() // < logic of the game 60 times per second
If fps_do_render = 1 Then render_my_game() // < render when you can't but no delay the logic please.
update2d(0)    // THIS MUST BE LIKE UPDATEWORLD() IN BLITZ3d  update  update  update  update  update  update  update  update  update  update
update3d(0)   // update  update  update  update  update  update  update  update  update  update  update  update  update  update  update


    //render2dback()
//ClearDepthBuffer()
//render3d()
//ClearDepthBuffer()
//Render2DFront()
//swap()
   
loop


Function logica()   // LOGIC

Local time as integer
time = GetMilliseconds()

fps_frame_logica = fps_frame_logica + 1
fps_last_millisec_logic = GetMilliseconds()
fps_do_logic = 0
fps_frame_steped = fps_frame_steped + 1

x# = sin(GetMilliseconds()*.05)*50
y# = cos((30+GetMilliseconds()*.02))*20
z# = cos((-30+GetMilliseconds()*.01))*10

SetCameraPosition(1,x#,y#,z#)
SetCameraLookAt(1,x#,y#,z#,0)


UPDATE_GAME()  // HERE I JUST UPDATE THE LOGIC OF THE GAME



//count how much millisecs i use to do this function
fps_last_logic_delay = GetMilliseconds() - time


EndFunction


Function render_my_game() // ; R e n d e r

Local time as integer
time = GetMilliseconds()

fps_frame_render = fps_frame_render + 1
fps_last_millisec_render = GetMilliseconds()
fps_do_render = 0
fps_frame_steped = 0


Print( "FPS LOOP : " + str(ScreenFPS()) + "  <<   this value must be very very high!! depending of speed of computer" )   /// can be very high. usefull to know about resources optimization
    Print( "RENDER FPS : " + str(fps_renders) + "  <<   this value depends on 3d load and yout graphic card and computer " )    // render fps depending on the time
    Print( "LOGIC FPS : " + str(fps_logicos) + "  <<   this must be constant setting " + str(fps_logica))     // update logic allways must be in 60 times per second
 

//    RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D
//    RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D
//    RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D
//    RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D
//    RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D
//    RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D   RENDER 3D

//render() //????????


/// i don't know where put this comandsSS!!!! hellppppppp!!!!!!
render2dback()
ClearDepthBuffer()
render3d()
ClearDepthBuffer()
Render2DFront()

swap()


fps_last_render_delay = GetMilliseconds() - time


EndFunction


Function update_fps()

Local render_step_time
Local logic_step_time

Local render_millisec_step_recomended as integer
render_millisec_step_recomended = 1000/60 //veces maxima que se deberia renderear por segundo.

If fps_start = 0
fps_start = GetMilliseconds()
EndIf
If GetMilliseconds() > fps_start + 1000
fps_renders = fps_frame_render
fps_frame_render = 0
fps_logicos = fps_frame_logica
fps_frame_logica = 0
fps_start = GetMilliseconds()
fps = fps_frame
fps_frame = 0
EndIf

fps_frame = fps_frame + 1
logic_step_time = 1000 / fps_logica

If fps_last_millisec_logic + logic_step_time  <  GetMilliseconds()
fps_do_logic = 1
Else
fps_do_logic = 0
EndIf

fps_step_render_per_frame  = 5

//;here i have the problem!!! in this conditions!
fps_step_render_per_frame =  1+(((fps_last_render_delay * 60)/1000))*2
If fps_step_render_per_frame < 1 Then fps_step_render_per_frame = 1
If fps_logicos < fps_logica Then fps_step_render_per_frame = fps_step_render_per_frame

//;this work but dont know how to do it
//;fps_step_render_per_frame = 3
If fps_logicos < fps_logica Then fps_step_render_per_frame = fps_step_render_per_frame + fps_logica-fps_logicos-1

If  fps_frame_steped => fps_step_render_per_frame  And fps_logicos <= fps_logica
fps_do_render = 1
Else
fps_do_render = 0
EndIf

EndFunction




FUNCTION UPDATE_GAME()

//MOVE CARS
//MOVE EVERTITHING


ENDFUNCTION


Offline Steve Elliott

  • Hero Member
  • *****
  • Posts: 2925
  • elgol 2021
Re: AGK logical frames separated from render frames rate
« Reply #1 on: June 03, 2020, 08:51:23 PM »
You can use SetSyncRate( 60, 0 ) for a maximum of 60 FPS, or SetSyncRate( 30, 0 ) for maximum 30 FPS.  You can also use SetSyncRate( 0, 1 ) for maximum speed (but that can hog the CPU).  If you want maximum speed then SetSyncRate( 0, 0 ) is better.  But SetSyncRate( 60, 0 ) can give a better 'consistant' FPS IMO.

That sets the maximum FPS, but you can also sync to the monitor refresh with SetVSync(1) following SetSyncRate.

After that Delta-time is your friend.
Windows 10 64-bit, 16Gb RAM, Intel i5 3.2 GHz, Nvidia GeForce GTX 1050 (2Gb)
MacOS Big Sur 64-bit, 8Gb RAM, Intel i5 2.3 Ghz, Intel Iris Plus Graphics 640 1536 MB
Linux Mint 19.3 64-bit, 16Gb RAM, Intel i5 3.2 GHz, Nvidia GeForce GTX 1050 (2Gb)
Raspberry Pi 400, Pi4, BBC B, C64, ZX Spectrum

Offline Santiago

  • Sr. Member
  • ****
  • Posts: 283
  • Blitz3d
    • Indiesoft
Re: AGK logical frames separated from render frames rate
« Reply #2 on: June 03, 2020, 10:11:13 PM »
Hi Steve !, yes, but what I'm looking for is to achieve in AGk the same as I did in B3D.
that manages to make them work on any computer at the same speed, perfectly.
but in agk, it is different.

Quote
SetSyncRate( 0, 0 ) is better

totally, in my case, the ideal would be with vertical sync = 0, but even so, if a user has vertical_sync activated, my game would continue to work indifferently.
Although ideally, it would be off, thus freeing the processor.

I suppose that what I am looking for is more focused on simulation type games,




i give a graphics example of one of my games



using the same code, but in blitz
1 system fps : 180337 (times my main loop repeats per seconds)
2 logic fps : 58 to calculate all physics and move, rotation, etcs.
3 RENDER, in this case, limited to 60, but vertical sync is off allways
4 GUI_UPDATE, i use all 2d interface on a screen image, and only update sometimes.
this if the renders is slower



9 fps of render, but logic keep runnin 60
and this is Tora Tora, old version in b3d, with the same code




the Renders FPS go fron 20 to 60 all the time, but you don't feel that because logic maintain stable

Offline Steve Elliott

  • Hero Member
  • *****
  • Posts: 2925
  • elgol 2021
Re: AGK logical frames separated from render frames rate
« Reply #3 on: June 03, 2020, 10:19:44 PM »
Unfortunately AGK doesn't have built-in render tweening like Blitz3D, so that's why I said delta time is your friend - to keep things running the same speed on all computers.
Windows 10 64-bit, 16Gb RAM, Intel i5 3.2 GHz, Nvidia GeForce GTX 1050 (2Gb)
MacOS Big Sur 64-bit, 8Gb RAM, Intel i5 2.3 Ghz, Intel Iris Plus Graphics 640 1536 MB
Linux Mint 19.3 64-bit, 16Gb RAM, Intel i5 3.2 GHz, Nvidia GeForce GTX 1050 (2Gb)
Raspberry Pi 400, Pi4, BBC B, C64, ZX Spectrum

Offline Santiago

  • Sr. Member
  • ****
  • Posts: 283
  • Blitz3d
    • Indiesoft
Re: AGK logical frames separated from render frames rate
« Reply #4 on: June 03, 2020, 10:35:09 PM »
ok i'm going to have to do a little research on that.

I'm looking on the internet what is render tweening, I really don't know what it is :)

I'm kind of ignorant


but it is difficult for me to understand how something so simple can be impossible.
I was hoping AGK is better than blitz on these things.



Quote
, so that's why I said delta time is your friend
i go to meet with my new friend right now to talk him :)


thanks Steve!

Offline Santiago

  • Sr. Member
  • ****
  • Posts: 283
  • Blitz3d
    • Indiesoft
Re: AGK logical frames separated from render frames rate
« Reply #5 on: June 03, 2020, 11:33:52 PM »
this is a Blitz3d code.

i add a delay variable to render time, to simulate a slow computer, or overload graphics.

its very simple, this must work on agk, or not?

i don't use any strange commandes


at least, mantain 60 update per second.
when the render is very slow.




Code: [Select]

Graphics3D 1920,1080,0,2 ;1024,768,0,2

SeedRnd mimillisecs()

Global fps_logica = 60 ;cantidad de veces que se debe repertir la logica por segundo / how many logic frame i wan per second
Global fps_render = 60  ;cantidad de veces que quisieramos que se renderee. / how many render frame i wan per second

Global fps_start = 0 ;cuando se inicio el loop / loop millisec start

Global fps_frame ;el numero de frames que llevamos en este segundo / count frames
Global fps_last ;millisec en el que se inicio el ultimo fps / last millisec frame

Global fps = 0 ;cantidad de veces que se repitio el loop principal / frame per second main loop
Global fps_logicos = 0 ;cantidad de veces que se repitio la logica en 1 segundo / logic frames per second count
Global fps_renders = 0 ;cantidad de veces que se rendereo en un segundo / render frames per second count

Global fps_do_render    ;indica si hay que renderear / i must render?
Global fps_do_logic     ;indica si hay que procesar logica / i must do the logic?

Global fps_frame_render ;cantidad de veces que se rendereo en el ultimo segundo / count how many renders in last second
Global fps_frame_logica ;cantidad de veces que se calculo la logica en el ultimo segundo / count how many logic have in the las second

Global fps_last_millisec_logic ;ultimo milisegundo en el que se calculo la logica / when was the last logic millisecs
Global fps_last_millisec_render ;ultimo milisegundo en el que se calculo el RENDER / when was the last render millisect

Global fps_last_render_delay = 0 ; / count how many millisecs take to render
Global fps_last_logic_delay = 0 ; / count how many millisecs take to do the logic

Global fps_step_render_per_frame ;cantidad de frames que tienen que esperar para renderear / how many steps  logic to do the render
Global fps_frame_steped ;veces que llevo haciendo la logica sin renderear


Global cam = CreateCamera()
Global light = CreateLight()
MoveEntity cam,0,0,-100

Type cubo
Field obj
End Type


For i = 1 To 1000
c.cubo = New cubo
c\obj = CreateCube()
cc=100
EntityColor c\obj,Rnd(100,100+cc),Rnd(cc)*.5,Rnd(cc)*0
EntityBlend c\obj,3
a= 50
PositionEntity c\obj,Rnd(-a,a),Rnd(-a,a),Rnd(-a,a)
TurnEntity c\obj,Rnd(360),Rnd(360),Rnd(360)
EntityShininess c\obj,1
Next

Global render_force_delay# = Abs(Sin(mimillisecs())*100)
Global vsync  = 0

While Not KeyHit(1)




update_fps()
If fps_do_logic = 1 Then logica()
If fps_do_render = 1 Then render()


Wend
End


Function logica()

Local time = mimillisecs()


fps_frame_logica = fps_frame_logica + 1
fps_last_millisec_logic = mimillisecs()
fps_do_logic = 0
fps_frame_steped = fps_frame_steped + 1

;game logic
update_game()
UpdateWorld()


;count how much millisecs i use to do this function
fps_last_logic_delay = mimillisecs() - time


End Function

Function render() ; R e n d e r

Local time = mimillisecs()

fps_frame_render = fps_frame_render + 1
fps_last_millisec_render = mimillisecs()
fps_do_render = 0
fps_frame_steped = 0

;force to delay the render to simulate old computers or slow render times
render_force_delay# = (Sin((mimillisecs())*.01))*20
If render_force_delay# < 0 Then render_force_delay# = 0

Delay render_force_delay#

RenderWorld

f=5  ; scale for graph

Color 255,255,255
Text 10,10,"System fps : " + fps
Color 0,255,0
Text 10,25, "Logic fps : " + fps_logicos
Text 200,25, " > time : " + fps_last_logic_delay + " ms"

Rect 400,25,5+fps_logicos*f,5,1

For i = 0 To 100 Step 10
Color 255,255,255
Text 400+i*f,110,i,1,1

Next


Color 255,10,0
Text 10,40, "Render fps : " + fps_renders
Text 200,40, " > time : " + fps_last_render_delay + " ms"

Rect 400,40,5+fps_renders*f,5,1
Color 255,100,0
Rect 400,46,5+fps_last_render_delay*f,5,1

Color 255,255,0
Text 10,55,"Gui_update/s " + fps_gui_update_per_sec + " / " + fps_gui_pudates_this_sec
Text 200,55, " > time : " + last_fps_last_gui_update_delay + " ms"
Rect 400,55,5+fps_gui_update_per_sec*f,5,1


Color 100,155,255
Text 10,80,"render_force_delay#  " + render_force_delay#  +" ms"
Rect 400,80,5+ render_force_delay*f,5,1

Text 10,170, "Mem V. consumida : " +((sys_memoria_inicial - AvailVidMem() ) /(1024*1024)) + " mb"
Color 225,0,225
Text 10,100,"Millisecs : " + MilliSecs()

Text 10,210, "VSYNC : " + vsync



If KeyHit(57) Then
If vsync = 0 Then vsync = 1 Else vsync = 0
EndIf


Flip 0

fps_last_render_delay = mimillisecs() - time


End Function

Function update_fps()

Local render_step_time
Local logic_step_time

Local render_millisec_step_recomended  = 1000/60 ;veces maxima que se deberia renderear por segundo.



If fps_start = 0 Then
fps_start = mimillisecs()
End If

If mimillisecs() > fps_start + 1000 Then

fps_renders = fps_frame_render
fps_frame_render = 0

fps_logicos = fps_frame_logica
fps_frame_logica = 0


fps_start = mimillisecs()
fps = fps_frame
fps_frame = 0

End If

fps_frame = fps_frame + 1


; debo calcular logica en este frame?
; Do logic?
logic_step_time = 1000 / fps_logica

If fps_last_millisec_logic + logic_step_time  <  mimillisecs() Then
fps_do_logic = 1
Else
fps_do_logic = 0
End If



; Debo calcular render?
; Render??
fps_step_render_per_frame  = 5


;here i have the problem!!! in this conditions!
fps_step_render_per_frame =  1+Int(Float((fps_last_render_delay * 60)/1000))*2
If fps_step_render_per_frame < 1 Then fps_step_render_per_frame = 1
If fps_logicos < fps_logica Then fps_step_render_per_frame = fps_step_render_per_frame

;this work but dont know how to do it
;fps_step_render_per_frame = 3
If fps_logicos < fps_logica Then fps_step_render_per_frame = fps_step_render_per_frame + fps_logica-fps_logicos-1

If  fps_frame_steped => fps_step_render_per_frame  And fps_logicos <= fps_logica Then
fps_do_render = 1
Else
fps_do_render = 0
End If


End Function



Function update_game()


For c.cubo = Each cubo
TurnEntity c\obj,1,1,1
MoveEntity c\obj,0,0,.1

x# = EntityX(c\obj,1)
y# = EntityY(c\obj,1)
z# = EntityZ(c\obj,1)

v# = .999
x# = x# * v#
y# = y# * v#
z# = z# * v#

PositionEntity c\obj,x,y,z,1
Next


End Function




Function mimillisecs()

Return ( MilliSecs() And $7FFFFFFF)

End Function




Offline GaborD

  • Sr. Member
  • ****
  • Posts: 349
Re: AGK logical frames separated from render frames rate
« Reply #6 on: June 04, 2020, 07:46:55 AM »
The easiest solution in AGK is to use GetFrameTime() as a multiplicator for your update values in your game logic.

If you additionally want to limit FPS, I'd suggest only using setVSync(1) and forgetting about setSyncRate()
SetSyncRate can be wonky in my experience. It's usually very close, but there is some jitteriness in the rendering with it at times. It's safer to just sync monitor refresh and additionally use the frame time for your game logic. This should give you stable and smooth game updates and rendering and also keep up the game's pace when the FPS dips below the refresh rate.
 

Offline Derron

  • Hero Member
  • *****
  • Posts: 3333
Re: AGK logical frames separated from render frames rate
« Reply #7 on: June 04, 2020, 09:24:55 AM »
Also using delta time / frame time ... allows to add in another multiplicator ("gamespeed") to allow for slowdowns, speedups ... eg. when doing replays of a spectacular manoevre.


bye
Ron

Offline Santiago

  • Sr. Member
  • ****
  • Posts: 283
  • Blitz3d
    • Indiesoft
Re: AGK logical frames separated from render frames rate
« Reply #8 on: June 04, 2020, 11:16:25 PM »
Thanks for the advices...

i go to make a stupid question:)

What is Delta time?

is the variable with the diference of speed? or is something else?

i have some problems to apply that mutiplicator in my forces types, but just i need to work in that, i realy like to have a slow motion camera :) :) :)

Offline Qube

  • Administrator
  • Hero Member
  • *****
  • Posts: 2589
  • I mostly code at night... Mostly.
    • SyntaxBomb - Indie Coders
Re: AGK logical frames separated from render frames rate
« Reply #9 on: June 05, 2020, 02:57:42 AM »
In it's simplest basic form delta time can be used like so :

Code: [Select]
SetVsync( 1 )
Local targetFrameRate As Float, deltaTime A Float, mySprite As Integer, xPos As Float, yPos As Float

targetFrameRate = 60

mySprite = < load in a super duper sprite >
xPos = 0
yPos = 0

Do
   DrawSprite mySprite, xPos, yPos
   Inc xPos, 1.0 * deltaTime
   Inc yPos, 0.5 * deltaTime

   Swap()
   deltaTime = GetFrameTime() * targetFrameRate
Loop

So movement is the same if the player is getting 30fps or 5000fps. Below targetFrameRate will result in movement jumps to keep up and above targetFrameRate will visually look the same as the targetFrameRate or even smoother for faster objects depending on your monitor / video card.

Even using a basic form of delta time helps massively for those on slow PC's and those with super fast PC's and high monitor refresh rates.

*EDIT* - Plus if you want to do slow motion or speed up movement ( as Derron mentioned ) then it's just a case of deltaTime * speed whereby speed 0.5 is slower, 1 is normal and 2 it faster etc etc.
Mac mini ( 2018 / 2020 ), 3 GHz 6-Core Intel Core i5, 16 GB 2667 MHz DDR4, 1TB NVMe, eGPU Radeon Pro 580 8 GB, LG Ultragear 27GL83A-B 27 Inch
Commodore VIC-20, 1.1Mhz MOS 6502 CPU, 5KB RAM, VIC ( 6560 ) GPU

Until the next time...

Offline Steve Elliott

  • Hero Member
  • *****
  • Posts: 2925
  • elgol 2021
Re: AGK logical frames separated from render frames rate
« Reply #10 on: June 05, 2020, 03:14:14 AM »
Quote
The easiest solution in AGK is to use GetFrameTime() as a multiplicator for your update values in your game logic.

I wasn't aware of a 'GetFrameTime()' function, thanks GaborD...And as you can see Santiago, Qube has just posted an example.
Windows 10 64-bit, 16Gb RAM, Intel i5 3.2 GHz, Nvidia GeForce GTX 1050 (2Gb)
MacOS Big Sur 64-bit, 8Gb RAM, Intel i5 2.3 Ghz, Intel Iris Plus Graphics 640 1536 MB
Linux Mint 19.3 64-bit, 16Gb RAM, Intel i5 3.2 GHz, Nvidia GeForce GTX 1050 (2Gb)
Raspberry Pi 400, Pi4, BBC B, C64, ZX Spectrum

Offline Santiago

  • Sr. Member
  • ****
  • Posts: 283
  • Blitz3d
    • Indiesoft
Re: AGK logical frames separated from render frames rate
« Reply #11 on: June 05, 2020, 05:24:51 AM »
Excelent guys!! thank you so much!


Tomorow i go to apply my atemp of deltatime in my game!!!

thanks!!

Offline 3DzForMe

  • Hero Member
  • *****
  • Posts: 1177
Re: AGK logical frames separated from render frames rate
« Reply #12 on: June 05, 2020, 05:58:28 AM »
It appears AGK gives you plenty of options to skin the timing cat, sweet!

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal