360 degree movement?

BlitzPlus Forums/BlitzPlus Programming/360 degree movement?

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Don't mind the fact that it looks ugly :) it's well beyond bedtime already.. *yawn* .. but this should be all the info you need:

use 4 vars:

playerX#
playerY#
playerSpeed#
playerAngle

the rest is obvious..

~enjoy~

app=CreateWindow("",8,8,640,480,0,0)
canvas=CreateCanvas(0,0,640,480,app)

Global arrow=CreateImage(32,32),arrowtemp=CreateImage(32,32)
MidHandle arrow

SetBuffer ImageBuffer(arrow)
	Line 0,31,16,0
	Line 17,0,31,31
	Line 0,31,31,31
	Line 2,27,29,27


SetBuffer CanvasBuffer(canvas)

timer=CreateTimer(40)

Global playerX#=320,playerY#=240
Global playerSpeed#=1,playerAngle=0


Repeat
	WaitEvent()
	If EventID()=$803 quit=True

	If EventID()=$4001
		Controls()
	EndIf
	
	Text 0,0,"alt F4 = quit"

	FlipCanvas canvas:Cls
	
Until quit
End

Function Controls()

	If KeyDown(200) ; up
		playerSpeed#=playerSpeed#+.1
		If playerSpeed#>4 playerSpeed#=4
	EndIf
	
	If KeyDown(208) ; down
		playerSpeed#=playerSpeed#-.1
		If playerSpeed#<0 playerSpeed#=0
	EndIf
	
	If KeyDown(203) ; L
		PlayerAngle=(PlayerAngle+350) Mod 360
	EndIf
	
	If KeyDown(205) ; R
		PlayerAngle=(PlayerAngle+10) Mod 360
	EndIf
	
	UpdatePlayer()
	DrawPlayer()
	
End Function

Function DrawPlayer()

	Plot playerX#,playerY#

	arrowtemp=CopyImage(arrow)
	
	RotateImage arrowtemp,playerAngle
	DrawImage arrowtemp,playerX#,playerY#

End Function

Function UpdatePlayer()

	playerX#=playerX#+Sin(playerAngle)*playerSpeed#
	playerY#=playerY#-Cos(playerAngle)*playerSpeed#

End Function