i've already asked something similar, but now i've the problem to manage and realize a "realistic" steering for a simple 2d (top-down) car racing game.
How can i do a "realistic" steering for the car ? (i use c# but another language is welco开发者_StackOverflow社区me;)) Using Sin and Cos ? If yes, how ? Thanks in advance!
I'm on my lunch break so I can't do tremendous justice to the "best" answer, but the pseudocode looks something like this:
y_change = sin(rotation) * speed;
x_change = cos(rotation) * speed;
car.x += x_change;
car.y += y_change;
you would execute this code in every frame; rotation would be controlled by your steering input, and speed would be controlled by your acceleration input.
You will probably want to use a physics engine that someone else has already created. I've heard good things about the XNA Physics API.
I would imagine that you will have to use sine and cosine, but that is the just the tip of a VERY large iceberg...
Brian Driscoll’s helpful answer ten years ago is all you need to know about this for non-demanding applications. I often use Euler integration of position via velocity vector as modified by accelerations from a controller.
An interesting sidelight for wheeled vehicles is that they do not rotate around their center of gravity. A typical car rotates about a point along the line through the rear axle, but offset well to the side.
This concept is important for real vehicles. Their steering mechanism tries to conform to Ackermann steering geometry to minimize wear due to slip. In simulated vehicles these considerations are import for modeling instantaneous curvature and predicting future path.
Algorithm is:
Record how someone's else drives (using dev. version of game)
(Optional) Split up recording into snippets for variety of usual situations.
Replay recordings in game. (Using suitable snippets and possibly interpolate trajectory between them).
You may also try fuzzy logic and simple steering unit model.
Model would be:
x = integrate horiz_velocity by t
horiz_velocity = intergate steering_angle by t
and steering_angle = fuzzy_steering_function(...)
精彩评论