Shooter problems....

Blitz3D Forums/Blitz3D Programming/Shooter problems....

elseano(Posted 2003) [#1]
Hmm
Seem to be having a problem with my code. When I run it, the bullets stop about 2 seconds after they have been fired.
Will I have to use types or something?

;;;;;;;;;;;;;;;;;;;;;

While Not KeyHit(1)

updatebullet


If KeyDown (203) Then TurnEntity player,0,0.75,0 ;turn player left
If KeyDown(205) Then TurnEntity player,0,-0.75,0 ;turn player right
If KeyDown(200) Then playerspeed=playerspeed+0.1 ;speed up player
If KeyDown(208) Then playerspeed=playerspeed-0.1 ;slow down player
If KeyDown(30) Then MoveEntity player,0,0.5,0 MoveEntity cam,0,0.5,0 ;move player up
If KeyDown(44) Then MoveEntity player,0,-0.5,0 MoveEntity cam,0,-0.5,0 ;move player down

If playerspeed>3 Then playerspeed=3
If playerspeed<1 Then playerspeed=1


If KeyHit(45) Then

spark=CreateSphere(10)
EntityAlpha spark,0.7
EntityColor spark,255,100,20
PositionEntity spark,EntityX#(player),EntityY#(player),EntityZ#(player)
TurnEntity spark,0,EntityYaw(player),0

EndIf

MoveEntity player,0,0,playerspeed
MoveEntity spark,0,0,playerspeed+2
sparktimer=sparktimer+1
smoothcam(piv,player,70)

if entitycollided(player,nodec)
print "<< You got a node! >>"
nodes=nodes+1

endif

RenderWorld
UpdateWorld

Flip

wend

End

;;;;;;;;;;;;;;;;;;;;;;


Ross C(Posted 2003) [#2]
Well, i'd use types for bullets :) Means you can have more than one bullet on-screen with little hassle. About your bullet stopping. It might be becaus your trying to fire more than one, and the bullet is getting reset back to it's start position.
Try this out. I know it probably isn't what your game does, but should give you an idea of what to do. Need to rush now, so i'll comment it when i get back :D

Arrow keys to turn and move, X or Z to shoot...i forget :D

Graphics3D 800,600
SetBuffer BackBuffer()

Global camera=CreateCamera()
PositionEntity camera,0,0,-40

Global light=CreateLight()

Global main_bullet=CreateSphere()
ScaleEntity main_bullet,1,0.2,0.2
HideEntity main_bullet

Global player=CreateSphere()
ScaleEntity player,2,0.5,0.5
EntityColor player,50,50,200

Global playerspeed#=0

Type bullet
	Field ent
	Field x#,y#,z#
	Field speed#
	Field time
	Field timer
End Type

While Not KeyHit(1)


	
	
	If KeyDown (203) Then TurnEntity player,0,0,0.75 ;turn player left 
	If KeyDown(205) Then TurnEntity player,0,0,-0.75 ;turn player right 
	If KeyDown(200) Then playerspeed=playerspeed+0.003 ;speed up player 
	If KeyDown(208) Then playerspeed=playerspeed-0.003 ;slow down player 
	;If KeyDown(30) Then MoveEntity player,0,0.5,0 MoveEntity cam,0,0.5,0 ;move player up 
	;If KeyDown(44) Then MoveEntity player,0,-0.5,0 MoveEntity cam,0,-0.5,0 ;move player down 
	
	If playerspeed>0.1 Then playerspeed=0.1
	If playerspeed<0 Then playerspeed=0 
	
	
	If KeyHit(45) Then 
		createbullet(player)
	
	EndIf 
	
	MoveEntity player,playerspeed,0,0
	;MoveEntity spark,0,0,playerspeed+2 
	;sparktimer=sparktimer+1 
	;smoothcam(piv,player,70) 
	
	;If EntityCollided(player,nodec) 
	;Print "<< You got a node! >>" 
	;nodes=nodes+1 
	
	;EndIf 
	updatebullet()
	RenderWorld 
	UpdateWorld 
	
	Flip 

Wend 


End

Function createbullet(player)
	b.bullet=New bullet
	b\ent=CopyEntity (main_bullet)
	b\x=EntityX(player)
	b\z=EntityZ(player)
	b\y=EntityY(player)
	TurnEntity b\ent,0,0,EntityRoll(player)
	PositionEntity b\ent,b\x,b\y,b\z
	b\speed=0.2
	b\time=3000
	b\timer=MilliSecs()
End function
Function updatebullet()
For b.bullet=Each bullet
	MoveEntity b\ent,b\speed,0,0
	If MilliSecs()>b\time+b\timer Then
		FreeEntity b\ent
		Delete b.bullet
	End If 
Next
End Function



elseano(Posted 2003) [#3]
Thanks, I really needed some help with this.