Here's something I posted a couple of years ago .....
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 TypePlayer
Field Model
Field SpeedX#
Field SpeedY#
Field TurnSpeed#
Field TurnDrag#
Field TurnAcceleration#
Field MoveDrag#
Field MoveAcceleration#
Field MoveDeceleration#
End Type
Type Frame
Field SpeedFactor#
End Type
Global FL.Frame = New Frame
FL\Speedfactor = 1 ;60fps
Dim Player.TypePlayer(10)
;main program
LoadPlayer()
While Not KeyDown(1)
DoPlayer()
RenderWorld()
Flip
Wend
;===============================================
;===============================================
;===============================================
Function LoadPlayer()
For i = 1 To 10
Player(i) = New TypePlayer
Player(i)\SpeedX# = 0
Player(i)\SpeedY# = 0
Player(i)\TurnSpeed# = 0
Player(i)\TurnAcceleration# = 0.03
Player(i)\TurnDrag# = .99
Player(i)\MoveAcceleration# = 0.05
Player(i)\MoveDeceleration# = 0.05
Player(i)\MoveDrag = .99
;MaxSpeed = .03 / ( 1.0 -.99 ) = 3
;MaxTurnSpeed = .05 / ( 1.0 - .99 ) = 5
Player(i)\Model = CreateCone()
ScaleEntity(Player(i)\Model, 10, 10,10)
HideEntity(Player(i)\Model)
Next
ShowEntity(Player(1)\model)
End Function
;===============================================
;===============================================
;===============================================
Function DoPlayer()
For i = 1 To 10
DoPlayerMovement( Player( i ) )
Next
End Function
;===============================================
;===============================================
;===============================================
Function DoPlayerMovement( p.TypePlayer )
;turning
Turn# = KeyDown (LeftKey) - KeyDown(RightKey)
p\TurnSpeed# = p\TurnSpeed# *p\TurnDrag + Turn * p\TurnAcceleration * FL\SpeedFactor
TurnEntity p\Model , 0,0, p\TurnSpeed * FL\SpeedFactor
;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 * FL\SpeedFactor * TFormedX()
p\SpeedY = p\SpeedY * p\MoveDrag + Thrust * FL\SpeedFactor * TFormedY()
TranslateEntity p\Model, p\SpeedX , p\SpeedY , 0
End Function
|