Imagescollide

BlitzMax Forums/BlitzMax Beginners Area/Imagescollide

Awesome(Posted 2012) [#1]
So I know why this fail, I just have no idea how to fix it. when it get's to images collide, technically the bullet doesn't exist yet as I haven't pressed space bar, so it tells me that it doesn't recognize b. How would I make this code work?

Repeat

Cls

For Local l:Objects = EachIn Objectlist
l.Updatestate()
l.Drawstate()
Next

For Local life:Int = 1 To Lives
DrawRect 30*life,580,25,20
Next

If KeyHit(key_space) Then Local b:Bullet = New Bullet.Create("Images/Bullet.png",hero.x,hero.y-20)

If ImagesCollide(b.Image,b.x,b.y,0,e.Image,e.x,e.y,0)
ListRemove Objectlist,e
ListRemove Objectlist,b
Exit
EndIf

If Lives = 0 Then End

Flip

Until AppTerminate() Or KeyHit(key_escape)


I've tried adding "If Bullet.Objectlist" to the imagescollide code, it then decides to tell me that "Objectlist" does not exist. in spite of it working everywhere else in the code.


Jesse(Posted 2012) [#2]
not the best way of doing it but it will work:


'note that I loaded the image as a pixmap and stored it globally
Global pixmap:TPixmap = LoadPixmap("Images/bullet.png")

Repeat

	Cls
	
	' ************* Logic *******************
	For Local l:Objects = EachIn Objectlist 
		l.Updatestate()
	Next 
	
	
	For Local b:Bullet = EachIn objectList
		For Local e:Enemy = EachIn objectList			
			If ImagesCollide(b.Image,b.x,b.y,0,e.Image,e.x,e.y,0) 
				ListRemove objectList,e
				ListRemove objectList,b
			EndIf 
		Next
	Next
	
	If KeyHit(key_space) Then
                'this creates a bullets and stores it for future use.
                'passes the pixmap to the collision instead going trough file access every time which is really slow.
               
		Local b:Bullet = New Bullet.Create(pixmap,hero.x,hero.y-20)  ' uses LoadImage(pixmap)
		objectList.AddLast(b)
	EndIf 

	If Lives = 0 Then End 
	
	
	' graphics done separate from logic.

	For Local l:Objects = EachIn Objectlist
		l.Drawstate()
	Next 

	For Local life:Int = 1 To Lives
		DrawRect 30*life,580,25,20
	Next 
	
	
	Flip

Until AppTerminate() Or KeyHit(key_escape)


I would keep the bullets in a separate list so there can be different type of enemies in the enemy list while allowing collision of bullet with enemies.