I am finishing a very basic 2D racing game with top-down perspective. I can't get the appropriate formulas to make the movement of the cars fun and addictive... Do you have tips on how to achieve that arcade feeling a lot of games have? Do you know of any guide/tutorial on this topic?

Right now, these are the formulas I am using:

// (speed changes linearly according to the user input)
direction += turnAmount.Value;
Vector3 pos = Position + new Vector3(speed.Value * (float)Math.Cos(direction), 0, -speed.Value * (float)Math.Sin(direction));

I have tested other, more complex options but this is the best I have got so far...

  • \$\begingroup\$ how are you moving cars so far if they are physically simulated? \$\endgroup\$ – Ali1S232 Oct 9 '11 at 20:43
  • \$\begingroup\$ I edited my question to answer yours. \$\endgroup\$ – miguelSantirso Oct 9 '11 at 20:54

I can you change speed in some non-linear algorithm like :

if(userinput == move_faster)
    if(maxSpeed/2 - oldSpeed/2 <= maximum_acceleration)
        newspeed = (oldspeed + maxSpeed) / 2;
        newspeed = oldSpeed + maximum_acceleration;
    if (userinput == stop_move)
        newspeed = oldspeed - someValue;
        newspeed = oldspeed * 0.99;

in this code maxSpeed is the maximum speed that a car can go and someValue is how fast a car stops.

I'm not sure but I guess also you can also change rotation algorithm something like this:

if (newspeed > somevalue2)
    direction += turnAmount.value / newspeed * somevalue2;
    direction += turnAmount.value * newspeed / somevalue2;

in this code somevalue2 represents a speed value in which your car is moving by a reasonable slow speed, let's say if you car can move by max 10m/s setting somevalue2 as 1 seems to be a good choice (although you have to test it runtime).

  • \$\begingroup\$ giving formula you describe, when player will press acceleration button for first time, initial speed will be directly half max speed. this is a little brutal, no ? \$\endgroup\$ – tigrou Mar 10 '12 at 10:07
  • \$\begingroup\$ you can always create a maximum value for changes. I've edited my answer to prevent that situation. \$\endgroup\$ – Ali1S232 Mar 10 '12 at 10:17

To get realistic looking movement, you have to apply as realistic physics as you can.

That would involve giving the cars momentum, velocity & mass and interact forces/torques (turning, acceleration, etc.) upon those momentum vectors in the same way an actual automotive engineer might.

Here's a good resource to introduce physics into your game. It's 3d but the principles can easily be applied to 2d as well.


  • 3
    \$\begingroup\$ Realistic is not the same as "fun." I think the question here is about fun, not realism. \$\endgroup\$ – ashes999 Oct 10 '11 at 2:59
  • \$\begingroup\$ Yes, I am trying to give the game a fun, arcade feeling... I think that making it realistic would be easier! \$\endgroup\$ – miguelSantirso Oct 10 '11 at 10:01
  • 1
    \$\begingroup\$ @ashes999 Even though you're right that realism != fun, basing the physics on reality isn't a bad idea. The movement 'feels' natural, but you can tweak the variables in your calculations to add an arcade-y feel to it. \$\endgroup\$ – Erik van Brakel Mar 10 '12 at 22:40
  • \$\begingroup\$ @ErikvanBrakel I agree with you 100%. That's a great approach. \$\endgroup\$ – ashes999 Mar 11 '12 at 1:17

Understanding the separation between realistic physics and fun physics, I suspect real physics are still a really good stepping point as a starting point, and then hacking around the physics to make it fun.

There is a fairly comprehensive guide to racing physics on http://phors.locost7.info/contents.htm. To be fair, I have only read small amounts of it and can not attest to its quality.

I would then start working on special cases - so, for instance adjusting friction when braking to make it more playable, and 'nudging' the car towards driving straight in the correct direction after drifting.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.