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