Bullets in arrays
Blitz3D Forums/Blitz3D Programming/Bullets in arrays
| ||
| Hi A while ago I posted something about bullets using types, because I was having some problems with them, and someone (I can't remember who...) suggested using an array for bullets instead of a bullet type. Could someone please explain this to me? I don't really know much about arrays other than to create one you do this: dim bullets(100) How would I then hide all the bullets, and then when I want to unhide one for use, how would I do that? Thanks in advance |
| ||
| What sort of problems did you have. I would use a type over an array for missiles/bullets myself =) [Edit] A little code snippet...
Global gMissNum=0
Global gTime=Millisecs()
Global gMissile=CreateCube()
PositionEntity gMissile,0,0,-1000; put template missile out of the way
Global gShip=LoadMesh("MySpaceshipMesh.b3d")
Type missiletype
Field mesh
End Type
;and in the main loop
text 0,0,"Number of active missile types "+gMissNum
;then call this function once per frame
Function Update_Missiles()
If MouseDown(1) Or KeyDown(157)
If MilliSecs()-gTime>100 ;minumum delay between each missile fire
missile.missiletype=New missiletype
gMissNum=gMissNum+1
missile\mesh=CopyEntity(gMissile)
PositionEntity missile\mesh,EntityX(gShip),EntityY(gShip),EntityZ(gShip)+6;position missile at ships gun
gTime=MilliSecs()
EndIf
EndIf
For missile.missiletype=Each missiletype
MoveEntity missile\mesh,0,0,2
If EntityZ(missile\mesh)>50 ;kill it when it goes out of view
FreeEntity missile\mesh
Delete missile
gMissNum=gMissNum-1
EndIf
Next
End Function
|
| ||
A similar thing with an array might be
Global gTime=Millisecs()
Global gMissile=CreateCube()
PositionEntity gMissile,0,0,-1000; put template missile out of the way
Global gShip=LoadMesh("MySpaceshipMesh.b3d")
Dim missile(100)
;then call this function every frame
Function Update_Missiles()
If MouseDown(1) Or KeyDown(157)
If MilliSecs()-gTime>100
createnewmissile=True
EndIf
EndIf
For m=0 To 99
;create a new one in an empty array element
If createnewmissile=True
If missile(m)=0
missile(m)=CopyEntity(gMissile)
PositionEntity missile(m),EntityX(gShip),EntityY(gShip),EntityZ(gShip)+6
createnewmissile=False
gTime=MilliSecs()
EndIf
EndIf
;move them
If missile(m)<>0
MoveEntity missile(m),0,0,2
If EntityZ(missile(m))>50
FreeEntity missile(m)
missile(m)=0
EndIf
EndIf
Next
End Function
You don't have to delete the missiles either, you could just leave them offscreen and move them back when they need firing again. |
| ||
| Ok, thanks. Just one thing I wanted to check as I couldn't find it in the help files: What does <> do? Does it mean 'Not equal'? |
| ||
| Yes you got it. |
| ||
| Ok. I just found one problem, though. After firing for a while, I can't fire any more. Why is this happening? Does using arrays mean there is some sort of limit to the ammount of bullets allowed on screen? |
| ||
| I fixed it, nevermind. |