Sign in to follow this  
Sollum

Game timer dilema

Recommended Posts

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?

Share this post


Link to post
Share on other sites
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 [tt]updates_per_second[/tt] in mind if you use frames to keep track of timing. Edited by fastcall22

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this