Yes for the 1,000,000th time!!
Blitz3D Forums/Blitz3D Programming/Yes for the 1,000,000th time!!
| ||
I need to make a vehicle move forward with a a keydown command, but I don't want the motion to be a linear movement. I'll like it to accelerate from a stop then decellerate after I release the key. I know I've asked this question before. I just don't remember what the result was. |
| ||
The best solution in my opinion is to use a physics sim engine like Tokamak or ODE. If you don't want to do that, I can't really help you because I have no experience in the field of car physics... |
| ||
Keep track of the velocity vector of your entity (using a type.) Each frame, apply a little force in the correct direction if the player is holding down the accelerator. Also, multiply the vector by a drag coefficient to achieve decceleration. |
| ||
You could use Sin() function. Have a counter variable:speed# = 0 speed_factor# = 2.0 while not keyhit(1) if keydown(200) then speed = speed + 0.1 elseif keydown(208) then speed = speed - 0.1 else if speed < 0 then speed = speed + 0.05 if speed >0 then speed = 0 elseif speed > 0 then speed = speed - 0.05 if speed <0 then speed = 0 end if end if MoveEntity car, 0, 0, sin(speed) * speed_factor updateworld renderworld flip wend end |
| ||
ok, without giving you the answer it's best to think of it in these terms: you need a few variables 1. the car 2. the amount of thrust when key is pressed 3. the cars velocity 4. the friction coefficient that will slow the car down Friction = .99 if key is down then thrust = 0.01 car_velocity = car_velocity + thrust car_velocity = car_velocity * friction add the car velocity to the car position in b3d you can just rotateentity and moventity. the sin/cos is done for you |
| ||
The Sin used above, is to give a gradual acceleration and friction :o) |
| ||
Sweet! That was it. Pretty easy! |
| ||
http://www.blitzbasic.com/Community/posts.php?topic=47422#527131 |
| ||
Very nice code Rob! |