Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


Game timer dilema


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 Sollum   GDNet+   -  Reputation: 771

Like
1Likes
Like

Posted 30 October 2013 - 02:55 PM

Good evening,

 

I have a simple dilemma, i cannot solve myself. Or rather, make up my mind.

I am making a game for both desktop and android devices. In my first game i was using "fps based movement". Which resulted game to run faster on some devices, due to the fact that not every device was running it on 60 fps.

 

I don't want to make same mistake, because this time it's not a puzzle game and its more action orientated.

But "distance traveled per time" is double edged sword. If device lags for 3 seconds, i might get dead.

 

Other option i thought of, hardcap FPS to 30. But then... how do i manage stuff like "buffs" and etc?... base them on time or frames passed?

 

Anyone could give me advice?



Sponsor:

#2 fastcall22   Crossbones+   -  Reputation: 4789

Like
0Likes
Like

Posted 30 October 2013 - 03:08 PM

Take a look at Gaffer's Fix Your Timestep. He recommends you update your game at a fixed rate and render as fast as possible interpolating between updates:
updates_per_second = 40
ticks_per_update = ticks_per_second / updates_per_second
time_per_update = 1 / updates_per_second 
accumulator = 0

while window_opened():
    accumulator += elapsed_ticks()

    while accumulator > ticks_per_update:
        game.update(time_per_update)
        accumulator -= ticks_per_update
    
    # interpolation is between 0 (previous state) and 1 (current state)
    interpolation = accumulator / ticks_per_update  

    game.render( interpolation )

# Somewhere in the game:
function object.draw(interp):
    interp_pos = (current_position - previous_position) * interp + previous_position

    draw(this, interp_pos)

But "distance traveled per time" is double edged sword. If device lags for 3 seconds, i might get dead.

You can add some logic to prevent the game loop from locking up on itself by detecting and discarding multiple updates:
    # if updating falls behind, sacrifice a few updates and accept lag
    if accumulator / ticks_per_update > 3:
        accumulator %= ticks_per_update

Other option i thought of, hardcap FPS to 30. But then... how do i manage stuff like "buffs" and etc?... base them on time or frames passed?

Either approach will work; just keep updates_per_second in mind if you use frames to keep track of timing.

Edited by fastcall22, 30 October 2013 - 03:33 PM.

c3RhdGljIGNoYXIgeW91cl9tb21bMVVMTCA8PCA2NF07CnNwcmludGYoeW91cl9tb20sICJpcyBmYXQiKTs=

#3 L. Spiro   Crossbones+   -  Reputation: 16495

Like
1Likes
Like

Posted 31 October 2013 - 12:40 AM

To avoid lag that causes undesired over-running of player movements, see this.


L. Spiro



#4 Strewya   Members   -  Reputation: 1712

Like
0Likes
Like

Posted 31 October 2013 - 01:56 AM

Spiro, have you written the article you mention in your linked post? :)


devstropo.blogspot.com - Random stuff about my gamedev hobby


#5 L. Spiro   Crossbones+   -  Reputation: 16495

Like
0Likes
Like

Posted 31 October 2013 - 02:18 AM

No; I am holding off on articles and even my engine until my book is done.

 

 

L. Spiro



#6 ProgrammerDX   Members   -  Reputation: 184

Like
1Likes
Like

Posted 31 October 2013 - 06:11 AM

http://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step

use fixed timesteps for collision detection and physics (the bigger time interval your timestep is, the more prone to weird errors like objects flying thru walls is. The smaller your timestep is, the more CPU it costs because more steps... find your holy grail in your game...)

use variable timesteps for everything that doesn't interact with other stuff in your game, because it is FASTER (like for example a UI text clock that just needs updated to the latest value)

PS: this forum is bugged as hell my posts gets half-deleted alot.... wtf

#7 Sollum   GDNet+   -  Reputation: 771

Like
0Likes
Like

Posted 31 October 2013 - 03:56 PM

Cheers and thanks!






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS