for...next for bullets
Blitz3D Forums/Blitz3D Programming/for...next for bullets
| ||
I can't figure out how to make bullets with different weapons see, usually i do but then when I choose another weapon after I fire 16 bullets it says "Array index out of bounds" what do i do? |
| ||
If you want 16 bullets and you're using a Dim variable... Dim Bullet(15) ;or Global Bullet[15] the number starts at 0 and goes to 15 which means there's 16 all together. Does that help at all? Edit: Btw you forgot an End Select |
| ||
no GIA_Green_Fire_, what i mean is, i have lets say, 3 weapons (a pistol, with 16 bullets; a shotgun, with 8 bullets; and a sub machine gun, with 30 bullets) with the pistol it works fine, but when i choose another weapon i can only fire 16 bullets and then it says: "Array index out of bounds" That's what i mean |
| ||
Array index out of bounds... Are you sure you are accessing them correctly. When you create an array for instance "Dim Bullet(16)", you will actually have 16 (0 - 15) elements in the array. The bounds of the array will be as follows... Bullet(0) Bullet(1) Bullet(2) Bullet(3) Bullet(4) Bullet(5) Bullet(6) Bullet(7) Bullet(8) Bullet(9) Bullet(10) Bullet(11) Bullet(12) Bullet(13) Bullet(14) Bullet(15) If you tried to access "Bullet(16)", you wil get the message "Array index out of bounds" I hope that helps. |
| ||
Wrong - in blitz dim myarray(10) gives you access to 11 elements 0-10. Types are much better suited to bullet/projectile than arrays (my own preference anyway). |
| ||
Matty... I stand corrected. ;) Dim myarray(10) For i = 0 To 10 myarray(i) = i Next For i = 0 To 10 Print myarray(i) Next WaitKey() End |
| ||
I'm trying to find a projectile example using Blitz3d. I found this one, but it seems too mush function involved. If anyone have a simple way to do it, please can anyone post it.; Add projectile Type Type Projectile Field sprite, time_out End Type ; Add Explosion Type Type Explosion Field sprite, scale# End Type ; Load Projectile Sprites explosion_sprite = LoadSprite( "explosion.bmp" ) HideEntity explosion_sprite projectile_sprite = LoadSprite( "heart.bmp" ) EntityRadius projectile_sprite, 2 EntityType projectile_sprite, coll_projectile HideEntity projectile_sprite Global player, projectile_sprite, explosion_sprite, hit, shoot, boom Function object_key_control( obj ) ; Add spacebar = fire If KeyHit(57) Then CreateProjectile( player ) End Function Function UpdateProjectiles() For P.Projectile = Each Projectile UpdateProjectile( P ) Next For E.Explosion = Each Explosion UpdateExplosion( E ) Next End Function Function CreateProjectile.Projectile( source ) P.Projectile = New Projectile P\time_out = 150 P\sprite = CopyEntity( projectile_sprite, source ) ; Don't want projectiles coming out of player's feet :) MoveEntity P\sprite, 0, 2, 0 EntityParent P\sprite, 0 shootChannel = PlaySound ( shoot ) Return P End Function Function UpdateProjectile( P.Projectile ) If CountCollisions( P\sprite ) If EntityCollided( P\sprite, coll_characters ) For k = 1 To CountCollisions( P\sprite ) hit = CollisionEntity( P\sprite, k ) If GetEntityType( hit ) = coll_characters Exit EndIf Next boomChannel = PlaySound (boom) CreateExplosion( P ) FreeEntity P\sprite Delete P Return EndIf EndIf P\time_out = P\time_out - 1 If P\time_out = 0 FreeEntity P\sprite Delete P Return EndIf MoveEntity P\sprite, 0, 0, 1 End Function Function CreateExplosion.Explosion( P.Projectile ) E.Explosion = New Explosion E\scale = 1 E\sprite = CopyEntity( explosion_sprite, P\sprite ) EntityParent E\sprite, 0 Return E End Function Function UpdateExplosion( E.Explosion ) If E\scale < 5 E\scale = E\scale + .2 ScaleSprite E\sprite, E\scale, E\scale Else FreeEntity E\sprite Delete E For Character.Sprite = Each Sprite If Character\ID = hit Then Delete Character : FreeEntity hit Next EndIf End Function I'm trying to understand this one myself. I will get it eventually. Source code from: http://jnoodle.com/Blitz3D/lesson8.html |
| ||
The code doesn't have to be difficult for projectiles: Example code: Const Width = 800, Height = 600 Graphics3D Width, Height, 32, 1 SetBuffer BackBuffer() Type Bullet Field Entity End Type ;Load stuff... BulletTemplate = LoadMesh("Bullet.3ds") ;Set up stuff... Camera = CreateCamera() CameraViewport Camera, 0, 0, Width, Height CameraRange Camera, 1, 45 ;Main code and loop here... ;E.G: While Not Keyhit(1) If KeyHit(57) Then Bullets.Bullet = New Bullet Bullets\Entity = CopyEntity(BulletTemplate) ShowEntity Bullets\Entity EndIf UpdateBullets() UpdateWorld RenderWorld Flip Wend ;Function called once per loop to update bullets Function UpdateBullets() For Bullets.Bullet = Each Bullet MoveEntity Bullets\Entity, 0, 0, 1 If EntityZ(Bullets\Entity) > 50 Then FreeEntity Bullets\Entity Delete Bullets EndIf Next End Function The beauty of using types rather than an array is that you can have as many or as little bullets as you want. Each loop the function UpdateBullets is called which goes through each bullet and moves it, deleting it if it goes out of view of the camera. |
| ||
indentation makes code unreadable. |