Jump to content

  • Log In with Google      Sign In   
  • Create Account


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.

  • You cannot reply to this topic
8 replies to this topic

#1 Vidar son of Odin   Members   -  Reputation: 1320

Like
0Likes
Like

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


Check out my portfolio : https://bratie.wordpress.com

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

 


Sponsor:

#2 Waterlimon   Crossbones+   -  Reputation: 2355

Like
1Likes
Like

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)


Waterlimon (imagine this is handwritten please)


#3 Vidar son of Odin   Members   -  Reputation: 1320

Like
0Likes
Like

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.


Check out my portfolio : https://bratie.wordpress.com

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

 


#4 Waterlimon   Crossbones+   -  Reputation: 2355

Like
1Likes
Like

Posted 30 March 2014 - 07:39 AM

Define "weird movement"


Waterlimon (imagine this is handwritten please)


#5 Vidar son of Odin   Members   -  Reputation: 1320

Like
0Likes
Like

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.


Check out my portfolio : https://bratie.wordpress.com

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

 


#6 haegarr   Crossbones+   -  Reputation: 3741

Like
1Likes
Like

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.


#7 Vidar son of Odin   Members   -  Reputation: 1320

Like
0Likes
Like

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


Check out my portfolio : https://bratie.wordpress.com

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

 


#8 MuTeD   Members   -  Reputation: 114

Like
0Likes
Like

Posted 31 March 2014 - 12:06 PM

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


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

#9 Vidar son of Odin   Members   -  Reputation: 1320

Like
0Likes
Like

Posted 01 April 2014 - 05:15 AM

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


Check out my portfolio : https://bratie.wordpress.com

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



PARTNERS