Direction Control
BlitzMax Forums/BlitzMax Beginners Area/Direction Control
| ||
| I know its in here somewhere but cannot find it. Where is information on how to control the direction that a vehicle travels. Ive been able to point the nose of the vehicle and move it in only 8 directions. There must be a way to point it in any direction and make it go straight ahead. Any help appreciated. Emmett |
| ||
| sin, cos and atan2. |
| ||
| To expand on tonyg's comment, you'll want to get into some trigonometry: http://en.wikipedia.org/wiki/Trigonometry In addition to x and y positions, you'll want to give your vehicle object velocity and heading information, too. Here are some of the variables I like to use: x# y# dx# dy# heading# velocity# acceleration# (Where heading is an angle between 0 and 360, and dx# and dy# fall on the unit circle. Every game turn, move your vehicle thus: x# = x# + (dx# * velocity#) y# = y# + (dy# * velocity#) To change your velocity, dx, and dy based on your current heading and acceleration, use vector math and trigonometric functions... |
| ||
| Fantastic, Kind of figured I would have to study trig. Was looking at it last night but was not sure. Am now. Thanks for the help. Emmett |
| ||
| OK, the truck moves correctly. I'm very stuck on making the trailer move realistically forward and backward. Would really appreciate a helping hand here. The truck.png is a square 21x21, the trailer.png is a rectangle 21x62. Graphics 800,600
Global truck = LoadImage("media/images/truck.png")
MidHandleImage truck
Global trailer = LoadImage("media/images/trailer.png")
SetImageHandle trailer,10,1
Global truckx#=320, trucky#=240, truckangle#=0, trailerangle#=0, thrustdx#=0, thrustdy#=0
While Not KeyDown(key_escape)
Cls
SetRotation truckangle
DrawImage truck,truckx,trucky
SetRotation trailerangle
DrawImage trailer,truckx,trucky+12
If KeyDown(KEY_LEFT) And KeyDown(key_up) truckangle:-1 trailerangle:+1
If KeyDown(KEY_RIGHT) And KeyDown(key_up) truckangle:+1 trailerangle:-1
If KeyDown(KEY_LEFT) And KeyDown(key_down) truckangle:+1 trailerangle:-1
If KeyDown(KEY_RIGHT) And KeyDown(key_down) truckangle:-1 trailerangle:+1
If KeyDown(key_up)
tdx#=Cos( truckangle-90 ) * 0.03
tdy#=Sin( truckangle-90 ) * 0.03
thrustdx = thrustdx + tdx
thrustdy = thrustdy + tdy
EndIf
If KeyDown(key_down)
tdx#=Cos( truckangle-90 ) * 0.03
tdy#=Sin( truckangle-90 ) * 0.03
thrustdx = thrustdx - tdx
thrustdy = thrustdy - tdy
EndIf
truckx:+thrustdx
trucky:+thrustdy
thrustdx:*0.955
thrustdy:*0.955
If truckx>GraphicsWidth()+14 truckx=-14 'bounds check
If truckx<-14 truckx=GraphicsWidth()+14
If trucky>GraphicsHeight()+14 trucky=-14
If trucky<-14 trucky=GraphicsHeight()+14
FlushMem
Flip
Wend |