Public Group

# Problems with 2d steering in SFML

This topic is 2023 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello,

I followed a tutorial for some simple 2d car steering but I can't get it to work and I do not understand why.. Can you look a bit at my code and point me in the right direction? T

Thank you.

//variables needed
sf::Vector2f carLocation;
float carSpeed;
float steerAngle;
float wheelBase = 50; //distance between wheels

//update function
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))//up
{
carSpeed += 0.05;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))//down
{
carSpeed -= 0.05;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))//left
{
steerAngle += 0.01;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))//right
{
steerAngle -= 0.01;
}

sf::Vector2f frontWheel = carLocation + wheelBase/2 * sf::Vector2f( cos(carHeading) , sin(carHeading) );
sf::Vector2f backWheel = carLocation - wheelBase/2 * sf::Vector2f( cos(carHeading) , sin(carHeading) );

carLocation = (frontWheel + backWheel) / 2.0f;
carHeading = atan2( frontWheel.y - backWheel.y , frontWheel.x - backWheel.x );

player.spr.move(carLocation);


This is the tutorial: http://engineeringdotnet.blogspot.ro/2010/04/simple-2d-car-physics-in-games.html

##### Share on other sites

What exactly does not work?

Do you get errors or is it broken in some other way?

Might want to make sure you are initializing your variables (the floats), i dont know if you are.

If you dont get errors, try debugging it to isolate the problem (find the location where you get wrong values, use your IDEs debugger or some other way eg. print values to some kind of output)

##### Share on other sites

It compiles but the movement don't work at all. Its a weird movement.. not realistic. carSpeed and steerAngle will be controlled by user input. carLocation and carHeading is calculated based on speed and angle. I want to be top-down movement. But if you have other ideas to implement 2d car movement or tips for me to do it I listen.

##### Share on other sites

Define "weird movement"

##### Share on other sites

I mean, if carSpeed and steerAngle will be constant, the car should move in a circle but it moves in a curve line.

##### Share on other sites

I mean, if carSpeed and steerAngle will be constant, the car should move in a circle but it moves in a curve line.

The condition to reach the starting point after a full turn is different from what you assume. The simulation with a discrete time step yields in a stepwise straight approximation of a curve, i.e. a polyline. If the polyline is a closed one, i.e. the outline a polygon, then it is inscribed in a circle. The count of segments of the polyline need to be an integral number then, and the angle from segment to segment is 360° divided by the count of segments. If the angle doesn't match this, the starting point is not hit, and the resulting course is a spiral, I think, or perhaps at best a "wobbling circle".

The approach used for steering the car is not "perfect" anyway. As soon as driving into a curve, the distance between the resulting front and rear wheels is shorter than wheelBase; this is more evident the sharper the curve is. The used algorithm computes the new center point and elongates the base so that its original length is reconstructed. This yields in 2 drawbacks: First, the real speed is somewhat lower as what is stored in carSpeed. Second, the rear wheel slides to the outside of the course.

Edited by haegarr

##### Share on other sites

I understand that. But now I'm stuck.. Can you provide a pseudocode algorithm for car movement in 2d top-down games? I am still learning..

##### Share on other sites

EDIT: How does one delete their post on GameDev.net?

I just glanced at your original post; I was confusing this thread with another one (where the OP didn't post the source code).

I honestly do not know how I would go about creating a "car" game where each axle is controlled separately.

I would create it arcade-game style, and simply have it move in the eight potential directions (most fun!).

Although that isn't very helpful. Sorry. :( I want to delete this post, but I can't! Aahhh..

##### Share on other sites

My problem is solved. Georger Araujo helped me and I want to say thank you again. Peace.

• ### Game Developer Survey

We are looking for qualified game developers to participate in a 10-minute online survey. Qualified participants will be offered a \$15 incentive for your time and insights. Click here to start!

• 14
• 30
• 9
• 16
• 22