Game timer dilema

Started by
5 comments, last by Sollum 10 years, 5 months ago

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?

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

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


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

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

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

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

L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

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

Cheers and thanks!

This topic is closed to new replies.

Advertisement