Graphics3D 640,480,16,1 Const Upkey = 200 Const DownKey = 208 Const LeftKey = 203 Const Rightkey = 205 Global Camera = CreateCamera() PositionEntity Camera,0,0,-150 Type Player Field Model Field SpeedX# Field SpeedY# Field TurnSpeed# Field TurnDrag# Field TurnAcceleration# Field MoveDrag# Field MoveAcceleration# Field MoveDeceleration# End Type Global ME.player = PLAYERcreate() ;main program While Not KeyDown(1) PLAYERmove( ME ) RenderWorld() Flip Wend ;=============================================== ;=============================================== ;=============================================== Function PLAYERcreate.Player() p.player = New Player p\SpeedX# = 0 p\SpeedY# = 0 p\TurnSpeed# = 0 p\TurnAcceleration# = 0.03 p\TurnDrag# = .99 p\MoveAcceleration# = 0.05 p\MoveDeceleration# = 0.05 p\MoveDrag = .99 ;MaxSpeed = .03 / ( 1.0 -.99 ) = 3 ;MaxTurnSpeed = .05 / ( 1.0 - .99 ) = 5 p\Model = CreateCone() ScaleEntity p\Model, 10, 10,10 Return p End Function ;=============================================== ;=============================================== ;=============================================== Function PLAYERmove( p.Player ) ;turning Turn# = KeyDown (LeftKey) - KeyDown(RightKey) p\TurnSpeed# = p\TurnSpeed# *p\TurnDrag + Turn * p\TurnAcceleration TurnEntity p\Model , 0,0, p\TurnSpeed ;moving Direction# = KeyDown(UpKey) - KeyDown(DownKey) TFormNormal 0,1,0, p\Model, 0 Thrust# = ( Direction = 1 ) * p\MoveAcceleration - ( Direction = -1 ) * p\MoveDeceleration p\SpeedX = p\SpeedX * p\MoveDrag + Thrust * TFormedX() p\SpeedY = p\SpeedY * p\MoveDrag + Thrust * TFormedY() TranslateEntity p\Model, p\SpeedX , p\SpeedY , 0 End Function