Why some object don't show itself?

BlitzPlus Forums/BlitzPlus Programming/Why some object don't show itself?

Valgar(Posted 2003) [#1]
I have this code;the problem is that i don't know why if i create 4 enemy,they show only one at time on-screen.....

Graphics 640,480,32,1
SetBuffer BackBuffer()  
Global aereo=LoadImage("d:\shoot\jet1.bmp") ;a simple sprite 
Global terreno=LoadImage("d:\shoot\terreno.bmp") ;a simple texture of 256*256 
Global missile=LoadImage("d:\shoot\bullet1.bmp") ;a simple sprite 
Global alien=LoadImage("d:\shoot\enemyjet1.bmp") ;a simple sprite
MaskImage aereo,0,67,171
MaskImage missile,0,67,171
MaskImage alien,0,67,171
Global bit=1
MidHandle aereo 
MidHandle missile 
MidHandle alien 
HidePointer  
Global b.alieno 
Type missile ;an object called missile 
	Field posx Field posy Field avanzamento Field contatore 
	Field image
End Type 

Type alieno 
	Field limite_dx,limite_sx,movx,movy,movimento,energia,image,percorso,strada,sinistra,destra
End Type 

;MAIN
Repeat
	Cls
	or_x=or_x
	or_y=or_y+bit ;this start the up scrolling adding "bit" to origin
	Origin or_x,or_y
	If or_y=2560 Then End ;if origin reach 2560 the program end
 	maptiles()
	Origin 0,0
	
	If or_y=200
		create_enemy(150,100,alien,10,1,2)
		create_enemy(200,100,alien,10,1,2)
		create_enemy(300,100,alien,10,1,2)
		create_enemy(400,100,alien,10,1,2) 
		;move_enemy()
	EndIf
	move_enemy()
	If or_y=300
		create_enemy(420,100,alien,5,2,2)
		create_enemy(320,100,alien,5,2,2)
		create_enemy(220,100,alien,5,2,2)
		create_enemy(120,100,alien,5,2,2)
		create_enemy(20,100,alien,5,2,2)
		;move_enemy()
	EndIf 
	move_enemy()
	
	DrawImage aereo,MouseX(),MouseY() 
	
	If MouseHit(1)=1 ;if i hit the mouse button i create a missile 
		create_missile() 
	EndIf 
	play_missile() ;this start the missil anim
	Flip 
	Until KeyDown(1)=1 
End 
;END MAIN

Function create_missile() 
	a.missile=New missile
	a\image=missile
	a\posx=MouseX() ;the x position of missile creation is the mouse coords(the same coords of my jet of course) 
	a\posy=a\posy+MouseY()-45 ;the missile creation start a bit up to the jet(for simulating the launch-bay hehe) 
	a\avanzamento=4 ;the speed of the missile 
	a\contatore=0 ;the starting value of the animation 
End Function 

Function play_missile() 
	For a.missile=Each missile  
		DrawImage a\image,a\posx,a\posy 
		a\posy=a\posy-a\avanzamento ;this move the missile up 
		a\contatore=a\contatore+a\avanzamento ;this start the counter of the missile course 
		For b.alieno=Each alieno
			If ImagesCollide(a\image,a\posx,a\posy,0,b\image,b\movx,b\movy,0) ;if the alien collide with the missile the energy go down of one unit
					b\energia=b\energia-1
					If b\energia=<0 Then Delete b
					Delete a ;if the missile collide with the alien the missile stop it's existance :P
					Exit ;exit loop if missile is dead. will cause error as they's no missile to check against the aliens
			EndIf
		Next
	Next 
End Function 

Function create_enemy(x,y,immagine,energia,movimento,velocita) 
	b.alieno=New alieno
	b\image=immagine
	b\movx=x
	b\movy=y 
	b\movimento=velocita 
	b\energia=energia ;the "teoric" energy of the alien,from when reach 0 the alien explode 
	b\percorso=y
	b\strada=movimento
	b\sinistra= - velocita
	b\destra= + velocita
	b\limite_dx=x+100
	b\limite_sx=x-1
End Function 

Function move_enemy() 
	For b.alieno =Each alieno 
		DrawImage b\image,b\movx,b\movy 
		Text b\movx,b\movy-20,b\energia
		If b\strada=1 
			movimento()
			Exit
		EndIf
		If b\strada=2 
			movimento2()
			Exit
		EndIf
	Next
End Function

Function MapTiles()
tilex=0
tiley=0
For tiley=256 To -2560 Step -256
For tilex=0 To 640 Step 256
DrawBlock terreno,tilex,tiley
Next
Next
End Function

Function movimento()
b\movx=b\movx+b\movimento	;start going right
b\movy=b\movy+1	;start go down
If b\movx => b\limite_dx	;if reach a certain value reverse its course
	b\movx=b\movx-b\movimento 
	b\movimento=b\sinistra
EndIf 
		
If b\movx =< b\limite_sx	;if reach a cerain value reverse its course and so on...
	b\movx=b\movx+b\movimento 
	b\movimento=b\destra
EndIf 

If b\movy=b\percorso+400	;continue its course until the movement down are equal to 400
	Delete b
EndIf

End Function

Function movimento2()
b\movy=b\movy+(b\movimento+1)	;start go down
If b\movy=b\percorso+400
	Delete b
EndIf

End Function


I don't know how to do -_-'
I want some storm of enemy and not a single enemy on screen...
Thanks


Valgar(Posted 2003) [#2]
Well....i think i have resolved the problem!
It's the same error that i made when coding :P logical error.
I have made two function "movimento() movimento2()" and inside of those function i have made en "exit" when the object is deleted....but those exit have no result because function only one time!
Yes,because i call only one time those function inside my main.....so if i delete those two function and write the same code(without any change!!!)inside the main function all works pretty well,and now i have hordes of enemies hehehe