Making Items scroll with background

BlitzPlus Forums/BlitzPlus Programming/Making Items scroll with background

En929(Posted 2009) [#1]
I'm trying to figure out how to make my apples scroll with the background so that I can go away from them when need be and come back to them when need be unless they are collected. Below, I commented on the parts that I'm trying to change to make it easier to find. Thanks:


Graphics 900, 900
SetBuffer BackBuffer()
 


EATUM = LoadImage ("Eatum.png") 
APPLE = LoadImage("Apple.png")
ORBE = LoadImage("Orbe.png")
DOOR = LoadImage("Door.png")
DOOR2 = LoadImage ("RDoor.png")
DOOR3 = LoadImage ("GDOOR.png")
DOOR4 = LoadImage ("PDOOR.png")
PANCAKES = LoadImage ("Pancakes.png")
INVISIBLEPATCH = LoadImage ("Invisible Patch.png")
MUSIC = LoadSound ("Track1.mp3")
COLLECTIONSOUND = LoadSound ("Collectionsound.mp3")



BACKGROUND =  LoadImage("Clouds.jpg")
BACKGROUND2 = LoadImage("backgroundtree.jpg")
BACKGROUND3 = LoadImage("Background3.jpg")
BACKGROUND4 = LoadImage ("Barber Shop.jpg")
BACKGROUND5 = LoadImage ("Background5.jpg")
BACKGROUND6 = LoadImage ("Background6.jpg")
BACKGROUND7 = LoadImage ("Armsup.jpg")


Type EATUM

Field x,y


End Type 	
		
	
Type APPLE

	Field x,y 

End Type 

Type ORBE

	Field x,y

End Type 

Type DOOR

	Field x,y

End Type

Type DOOR2

	Field x,y
	
	
End Type 

Type DOOR3

	Field x,y
	
End Type 

Type DOOR4

	Field x,y
	
End Type 

Type PANCAKES

	Field x,y
	
End Type 

Type INVISIBLEPATCH

	Field x,y
	
End Type


Type BACKGROUND
	
	Field x,y
	Field image
	
	
End Type 



e.EATUM= New EATUM

e\x = 70
e\y = 200


;I'm trying to get this array of apples to move with the background
;kind of like the coins in Super Mario Bros 3 where one can either walk 
;far away from the coins or towards the coins and the coins would
;still be in the same place (unless they are collected). That is, I'm 
;trying to make these apples be that way.

For z = 1 To 5
a.Apple = New  Apple
a\x = 50*z
a\y = 30 
Next 


o.ORBE = New ORBE
o\x = 100
o\y = -200
 



d.DOOR = New DOOR
d\x = 50
d\y = 50

			

b.BACKGROUND = New BACKGROUND

b\x = -200
b\y = 20
b\image = BACKGROUND 




Score = 0
amx = 1


PlaySound MUSIC


While Not KeyDown (1)  


Cls

		
		

TileImage (b\image,b\x,b\y)


Text 150,90, "Score " + Score


;Once again, here is the part that I would like to see scrolling with the 
;background (unless they are collected).

For a.APPLE = Each Apple


	
	DrawImage(APPLE,a\x,a\y)
		If ImagesCollide(EATUM,e\x,e\y,0,APPLE,a\x,a\y,0) Then 
		
				Delete a 
		
				score = score + 1 
		
				PlaySound (COLLECTIONSOUND)

		EndIf 

Next 







If KeyDown(203)

e\x = e\x - 3
b\x = b\x + 3
 
	If (o <> Null) Then
	
	
			If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) 
			
			o\x = o\x - 3

			EndIf 
	EndIf
	
EndIf
	


If KeyDown(205)
 
e\x = e\x + 3
b\x = b\x - 3


	If (o <> Null) Then
	

		If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) 
				
			 o\x = o\x + 3
	
	
	
		EndIf 

	EndIf

EndIf 


If KeyDown(200)
 e\y = e\y - 3


	If (o <> Null) Then

		If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then 
		
			 o\y = o\y - 3

		EndIf 

	EndIf
	
EndIf 		
			

If KeyDown(208) 
e\y = e\y + 3

	If (o <> Null) Then


		If ImagesCollide(EATUM,e\x,e\y,0,ORBE,o\x,o\y,0) Then
		
			  o\y = o\y + 3


		EndIf 


	EndIf 
	
EndIf 




	If (o <> Null) Then
	
			DrawImage (ORBE,o\x,o\y)
		
		If (d <> Null) Then 
		
			
			DrawImage (DOOR,d\x,d\y)
			
			
		
					If ImagesCollide(DOOR,d\x,d\y,0,ORBE,o\x,o\y,0) Then 
		
							 
							Delete o 
							Delete d
							
							
							score = score + 1				
				
							b\image = BACKGROUND2
							
							p.PANCAKES = New PANCAKES
							p\x = 20
							p\y = 20
							

					EndIf 
							
				 
				
					
		
		EndIf 

	EndIf  
	
				
					
	If (p <> Null) Then	
	
				DrawImage (PANCAKES,p\x,p\y)

						
					If ImagesCollide (EATUM,e\x,e\y,0,PANCAKES,p\x,p\y,0) Then 
						
									
								
										Delete p
										
									    score = score + 1 


										b\image = BACKGROUND3	
										
										
										d2.DOOR2 = New DOOR2
										
										d2\x = 20
										d2\y = 120
							
																
				
					EndIf 

				
	EndIf 
	
							
	
	If (d2 <> Null) Then
	
				DrawImage (DOOR2,d2\x,d2\y)
	
				
				
					If ImagesCollide (EATUM,e\x,e\y,0,DOOR2,d2\x,d2\y,0) Then
					
									Delete d2 	
					
					
									b\image = BACKGROUND4
									
									d3.DOOR3 = New DOOR3
									
									d3\x = 300
									d3\y = 420
										
						
									
					EndIf
					
	EndIf  
					
	If (d3 <> Null) Then
	
				DrawImage (DOOR3,d3\x,d3\y)
				
						If ImagesCollide (EATUM,e\x,e\y,0,DOOR3,d3\x,d3\y,0)
						
									Delete d3
						
									b\image = BACKGROUND5
									
									d4.DOOR4 = New DOOR4
									
									d4\x = 30
									d4\y = 30
									
									
						EndIf 


	EndIf 	


	If (d4 <> Null) Then
	
				DrawImage (DOOR4,d4\x,d4\y)
				
							If ImagesCollide (EATUM,e\x,e\y,0, DOOR4,d4\x,d4\y,0)
							
									Delete d4 
							
									b\image = BACKGROUND6
									
									i.INVISIBLEPATCH = New INVISIBLEPATCH
									i\x = 40
									i\y = -200
									
							EndIf 								
	
	EndIf 
	
	If (i <> Null) Then
	
				DrawImage (INVISIBLEPATCH,i\x,i\y)


						If ImagesCollide (EATUM,e\x,e\y,0,INVISIBLEPATCH,i\x,i\y,0)


									Delete i
									
									b\image = BACKGROUND7
									
						EndIf 



	EndIf 
	
	
	DrawImage (EATUM,e\x,e\y)
	
	
	Flip

Wend 




Yeshu777(Posted 2009) [#2]
Hi,

Without trying it, just add the background x offset to the apple position..

Something like:


For a.APPLE = Each Apple

	DrawImage(APPLE,(a\x + b\x),a\y)
	
        If ImagesCollide(EATUM,e\x,e\y,0,APPLE,(a\x + b\x),a\y,0) Then 
		
	      Delete a 
		
              score = score + 1 
		
	      PlaySound (COLLECTIONSOUND)

        EndIf 
Next 



Bear in mind your background starts at -200 on the x co-ords, so you'll now need to offest your apples by +200 when you initialise them in order to see them where they were originally.

eg..


For z = 1 To 5
     a.Apple = New  Apple
     a\x = 250*z         ;(+200 hundred to account for background offset)
     a\y = 30 
Next 




Regards,


En929(Posted 2009) [#3]
Thanks Yeshu. It worked!


Yeshu777(Posted 2009) [#4]
No worries.

I guess you are learning a lot on here,

However, it should be..


For z = 1 To 5
     a.Apple = New  Apple
     a\x = 200+(50*z)         ; as 200 is an absolute offset
     a\y = 30 
Next 



Otherwise your apples will be cast far and adrift.

8o)

Best Regards,