How to make one character shoot bullets
Monkey Forums/Monkey Beginners/How to make one character shoot bullets| 
 | ||
| I was wondering do any of you have a simple formula that just involves one character image shooting an array of bullets? How would you go about making that? Yes, I know it's weird I made that entire game a week ago but can't seem to get this right. Thanks anyway. | 
| 
 | ||
| Something like this: If player shoot then create bullet add bullet to bullet list EndIf Loop on bullets list Move bullets EndLoop | 
| 
 | ||
| Here's what I tried to do so far, but I can't get it right. I just have 2 characters here. The robot and the bullet, but it shoots all 4 bullets at once instead of shooting them individually. 
Strict
Import mojo
Global CharacterImage:Image
Global CharacterStartingPointX: Int = 200
Global CharacterStartingPointY: Int = 190
Global CharacterW: Int = 120
Global CharacterH: Int = 270
Global BulletImage:Image
Global BulletAmount: Int = 4
Global bullets: Bullet[BulletAmount]
Global BulletW: Float = 32.0
Global BulletH: Float = 32.0
Global Shoot: Bool = false
Class MyApp Extends App
		Method OnCreate:Int()
			SetUpdateRate(60)
	
					CharacterImage = LoadImage("Robo.png", 1, Image.MidHandle)
			
				For Local r: Int = 0 Until BulletAmount
				
					Local blt: Bullet = New Bullet(CharacterStartingPointX+100+ r*BulletW, CharacterStartingPointY-80)
					bullets[r]  = blt
					BulletImage =LoadImage("Bullet.png")
				End
	
			
			
			
				Return 0
		End
	
	
		Method OnUpdate:Int()
				If KeyDown(KEY_A) Then
					Shoot = true
				
				End
				Return True
		End
		
		
		
		Method OnRender:Int()
			Cls
			
			
					DrawImage(CharacterImage, CharacterStartingPointX, CharacterStartingPointY)
				
				If Shoot Then
					For Local blt: Bullet = Eachin bullets
				 
						If  blt Then 
						    blt.Draw()
						End
					End
				End
			Return 0
		End
End
Class Bullet
	Public
	
	Field BulletPosX: Float
	Field BulletPosY: Float
	
			Method New(x1: Float, y1: Float)
			
			BulletPosX = x1
			BulletPosY = y1
	
			
			End
		
		
		
			Method Draw: Void()
				
				
					DrawImage(BulletImage, BulletPosX, BulletPosY)
					
					
			
				
				BulletPosX +=1
			End 
End
Function Main:Int()
	New MyApp()
	Return True
End
 | 
| 
 | ||
| Try something like this, (I've removed the images and replaced them with Rects): Strict Import mojo Global CharacterStartingPointX: Int = 200 Global CharacterStartingPointY:Int = 190 Global CharacterW: Int = 120 Global CharacterH: Int = 270 Global BulletAmount:Int = 4 Global bullets:Bullet[BulletAmount] Global BulletW: Float = 32.0 Global BulletH: Float = 32.0 Class MyApp Extends App Method OnCreate:Int() SetUpdateRate(60) For Local r:Int = 0 Until BulletAmount Local blt:Bullet = New Bullet(CharacterStartingPointX + 100, CharacterStartingPointY) blt.shoot = False bullets[r] = blt End Return True End Method OnUpdate:Int() If KeyHit(KEY_A) Then For Local blt:Bullet = EachIn bullets If Not blt.shoot Then blt.shoot = True Exit End Next End For Local blt:Bullet = EachIn bullets If blt.shoot Then blt.Update() End Next Return True End Method OnRender:Int() Cls DrawRect CharacterStartingPointX, CharacterStartingPointY, CharacterW, CharacterH For Local blt:Bullet = EachIn bullets If blt.shoot Then blt.Draw() End Return True End End Class Bullet Field BulletPosX:Float Field BulletPosY:Float Field shoot:bool Method New(x1: Float, y1: Float) BulletPosX = x1 BulletPosY = y1 End Method Update:Void() BulletPosX += 5 If BulletPosX > DeviceWidth() BulletPosX = CharacterStartingPointX + 100 shoot = False End End Method Draw:Void() DrawRect(BulletPosX, BulletPosY, 10, 10) End End Function Main:Int() New MyApp() Return True End | 
| 
 | ||
| I haven't looked at any of the code posted here, but this thread might have some similarities that may apply with regards to the topic: http://www.monkey-x.com/Community/posts.php?topic=7551 | 
| 
 | ||
| Thanks therevills and Goodlucking, those two examples was perfectly what i was looking for. |