Asteroids type movement

Blitz3D Forums/Blitz3D Programming/Asteroids type movement

Craig H. Nisbet(Posted 2007) [#1]
Hey guys,

I think I've coded this like 5 times now and I forget every single time. How to I code asteroids style ship movement? The vehicle need to drift after I let up on the directions keys.


Yo! Wazzup?(Posted 2007) [#2]
Iv'e seen stuff like this before, but have never actually coded it. How about like (psuedocode)

while loop is going on
If the space key is hit then
speed=5
end if
rotate ship, speed
if speed is 0, skip this next part.
speed=speed-1
End if


hopefully you got that?


Mortiis(Posted 2007) [#3]
Like this?

Graphics3D 800, 600, 0, 2
SetBuffer BackBuffer()

Type tPlayer
	Field entity$
	Field speed#
End Type

Global Player.tPlayer = New tPlayer
	Player\entity = CreateCone()
	Player\speed = 0
	
	RotateEntity Player\entity, 90, 0, 0
	
Global Cam = CreateCamera()
	MoveEntity Cam, 0, 30, 0
	RotateEntity Cam, 90, 0, 0
	
	
While Not KeyHit(1)

	If KeyDown(200)
		Player\speed = Player\speed + .01		;Acceleration
	Else
		Player\speed = Player\speed - .006		;When it's not pressed, drain the speed
	EndIf
	
	;Limit the max and min speed
	If Player\speed < 0 Then Player\speed = 0	
	If Player\speed > 1 Then Player\speed = 1
	
	;Turning
	If KeyDown(203) Then TurnEntity Player\entity, 0, 3, 0, 1
	If KeyDown(205) Then TurnEntity Player\entity, 0, -3, 0, 1
	
	;Move the ship with speed variable
	MoveEntity Player\entity, 0, Player\speed, 0
	
	UpdateWorld
	RenderWorld
	Flip

Wend
EndGraphics
End



Stevie G(Posted 2007) [#4]
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



Yo! Wazzup?(Posted 2007) [#5]
YAY now I don't have to give real code :)