View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

# Problems with 2d steering in SFML

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

8 replies to this topic

### #1Mr. Lawliet  Members

Posted 30 March 2014 - 07:08 AM

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 carHeading;
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) );

backWheel += carSpeed  * dt.asSeconds() * sf::Vector2f(cos(carHeading) , sin(carHeading));
frontWheel += carSpeed * dt.asSeconds() * sf::Vector2f(cos(carHeading+steerAngle) , sin(carHeading+steerAngle));

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

"Don't gain the world and lose your soul. Wisdom is better than silver or gold." - Bob Marley

### #2Waterlimon  Members

Posted 30 March 2014 - 07:13 AM

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)

o3o

### #3Mr. Lawliet  Members

Posted 30 March 2014 - 07:26 AM

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.

"Don't gain the world and lose your soul. Wisdom is better than silver or gold." - Bob Marley

### #4Waterlimon  Members

Posted 30 March 2014 - 07:39 AM

Define "weird movement"

o3o

### #5Mr. Lawliet  Members

Posted 30 March 2014 - 10:12 AM

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

"Don't gain the world and lose your soul. Wisdom is better than silver or gold." - Bob Marley

### #6haegarr  Members

Posted 31 March 2014 - 07:34 AM

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, 31 March 2014 - 07:39 AM.

### #7Mr. Lawliet  Members

Posted 31 March 2014 - 08:31 AM

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

"Don't gain the world and lose your soul. Wisdom is better than silver or gold." - Bob Marley

### #8MuTeD  Members

Posted 31 March 2014 - 12:06 PM

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

“You may be disappointed if you fail, but you are doomed if you don't try.”Beverly Sills

### #9Mr. Lawliet  Members

Posted 01 April 2014 - 05:15 AM

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

"Don't gain the world and lose your soul. Wisdom is better than silver or gold." - Bob Marley

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.