0
\$\begingroup\$

So while working on my game, I decided that I would have a speed variable increase in the fashion

speed += 1/speed;

with the goal being that in the beginning it increases fast and then it increases slow as it gets higher. However this is being called each frame and I need to make it framerate independent, however just scaling it based on time doesn't give the same results throughout. How would I go about creating a framerate independent increase that dampens like this?

\$\endgroup\$
1
  • \$\begingroup\$ Can you provide some more detail? Is this a vehicle, sprite, etc.? What are the expected numerical limits of speed? \$\endgroup\$
    – Jon
    Commented Feb 29, 2016 at 2:27

1 Answer 1

1
\$\begingroup\$

I believe this will be a frame rate independent alternative for this type of movement:

speed = Math.log(time + 1) / Math.log(Math.E) + startingSpeed;

This sets speed equal to ln(time + 1) which increases at a rate of 1/time. You want the +1 because ln(t) is negative while t is less than 1 (and greater than zero).

Just have time start at zero and increase it by deltaTime or the equivalent every update.

Also, for the sake of performance you could store the value of Math.log(Math.E) in a variable and use it instead when calculating speed.

\$\endgroup\$
2
  • \$\begingroup\$ Good idea. But isn't math.log (math.e) just 1? \$\endgroup\$ Commented Feb 29, 2016 at 1:32
  • \$\begingroup\$ @Will No, it's approx. 0.4343. Math.log is log base 10. If math.log were log base e then it would be 1. \$\endgroup\$ Commented Feb 29, 2016 at 2:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .