Advertisement Jump to content
Sign in to follow this  
bratiefanut

Problems with 2d steering in SFML

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

If you intended to correct an error in the post then please contact us.

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

Share this post


Link to post
Share on other sites
Advertisement

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 this post


Link to post
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 this post


Link to post
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 this post


Link to post
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 this post


Link to post
Share on other sites

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

 

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 this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!