explode pixel

BlitzPlus Forums/BlitzPlus Programming/explode pixel

Hi !

How to do an pixels explosion effect in my retro game when my player (1 pixel) die !!!

Thanks !!!

here you go. point the mouse where you want the explosion then press the left mouse button to your hearts content :)

Graphics 800,600
SetBuffer BackBuffer()



Type particle
	Field x#,y#
	Field speed#
	Field angle#
	Field time
	Field timer
End Type



While Not KeyHit(1)

	Cls

	If MouseHit(1) Then
		For loop=1 To (Int(Rnd(25,49)))
			create_particles(MouseX(),MouseY())
		Next
	End If
	


	update_particle()
	Rect MouseX(),MouseY(),2,2
	Flip
Wend
End





Function create_particles(x,y)
	p.particle=New particle
	p\angle=Rnd(0,359)
	p\x=x
	p\y=y
	p\speed=Rnd(0.2,1.3)
	p\time=MilliSecs()+Int(Rnd(500,3000))
End Function


Function update_particle()
	For p.particle=Each particle
		Color Int(Rnd(20,250)),Int(Rnd(50,250)),Int(Rnd(50,250))
		Rect p\x,p\y,1,1
		p\x=p\x+(Sin(p\angle)*p\speed)
		p\y=p\y+(Cos(p\angle)*p\speed)
		If MilliSecs()>=p\time Then
			Delete p.particle
		End If
	Next
End Function


to make this useful for you ship thing, when your ship is destoryed, call
create_particles(x,y)

x and y being the location of the ship.

and put
update_particle()

before flip

just remember to put in the functions into your code. and the code that sets up the types.
Function create_particles(x,y)
	p.particle=New particle
	p\angle=Rnd(0,359)
	p\x=x
	p\y=y
	p\speed=Rnd(0.2,1.3)
	p\time=MilliSecs()+Int(Rnd(500,3000))
End Function


Function update_particle()
	For p.particle=Each particle
		Color Int(Rnd(20,250)),Int(Rnd(50,250)),Int(Rnd(50,250))
		Rect p\x,p\y,1,1
		p\x=p\x+(Sin(p\angle)*p\speed)
		p\y=p\y+(Cos(p\angle)*p\speed)
		If MilliSecs()>=p\time Then
			Delete p.particle
		End If
	Next
End Function


hope this helps :o)

slightly updated, with some color changing effects. Pixels now start off yellow and fade to red.

Graphics 800,600
SetBuffer BackBuffer()



Type particle
	Field x#,y#
	Field speed#
	Field angle#
	Field time#
	Field timer#
End Type



While Not KeyHit(1)

	Cls

	If MouseDown(1) Then
		For loop=1 To (Int(Rnd(25,49)))
			create_particles(MouseX(),MouseY())
		Next
	End If
	

		If MilliSecs()<timer+1000 Then
								frame=frame+1
	Else
								fps=frame
								frame=0
								timer=MilliSecs()
	End If


	update_particle()
	Rect MouseX(),MouseY(),2,2
	Text 0,0,"fps="+fps
	Flip
Wend
End





Function create_particles(x,y)
	p.particle=New particle
	p\angle=Rnd(0,359)
	p\x=x
	p\y=y
	p\speed=Rnd(0.2,1.3)
	p\timer=Int(Rnd(500,3000))
	p\time=MilliSecs()+p\timer
End Function


Function update_particle()
	For p.particle=Each particle
		Color 200+55*(1-(MilliSecs()-(p\time-p\timer))/(p\timer)),220*(1-(MilliSecs()-(p\time-p\timer))/(p\timer)),5
		Rect p\x,p\y,1,1
		p\x=p\x+(Sin(p\angle)*p\speed)
		p\y=p\y+(Cos(p\angle)*p\speed)
		If MilliSecs()>=p\time Then
			Delete p.particle
		End If
	Next
End Function


Many thanks Joker for this piece of code ! Nice effect !

Another attempt at it, using an image to determine the pixel colour (a bit of a mess but it works).

Graphics 800,600, 16, 2 

Global colours = LoadImage("colours.png")
Global NumCols = ImageWidth(colours)-1
Dim ColArray(NumCols*3)
LoadCols()

SetBuffer BackBuffer() 


Const GRAVITY# = 0.009
Global LIFESPAN% = (numcols/25);3
Const MIN_PARTICLES = 10
Const MAX_PARTICLES = 40

Type particle 
	Field x#,y# 
	Field speed# 
	Field angle# 
	Field time 
	Field timer 
	Field Col
End Type 


While Not KeyHit(1) 

Cls 

If MouseDown(1) Then 
For loop=1 To (Int(Rnd(MIN_PARTICLES,MAX_PARTICLES))) 
create_particles(MouseX(),MouseY()) 
Next 
End If 



update_particle() 
Rect MouseX(),MouseY(),2,2 
Flip 
Wend 
End 



Function create_particles(x,y) 
	p.particle=New particle 
	p\angle=Rnd(0,359) 
	p\x=x 
	p\y=y 
	p\speed=Rnd(0.2,1.3) 
	p\time=MilliSecs()+ (NumCols * LIFESPAN) 
	p\col = 0
End Function 


Function update_particle() 

	For p.particle=Each particle
		
		Color ColArray(p\col), ColArray(p\col+1), ColArray(p\col+2) 			;Int(Rnd(20,250)),Int(Rnd(50,250)),Int(Rnd(50,250)) 
		p\col = p\col + 3
		If p\col > NumCols Then p\col = NumCols
		
		Rect p\x,p\y,1,1 
		
		p\x=p\x+(Sin(p\angle)*p\speed) 
		p\y=p\y+(Cos(p\angle)*p\speed) + Int((GRAVITY# * Float(p\col)))
		
		If MilliSecs()>=p\time Then 
			Delete p.particle 
		End If 
	Next 
	
End Function 

Function LoadCols()

OldBuffer = GraphicsBuffer()
SetBuffer(ImageBuffer(colours))

For iLoop = 0 To NumCols  Step 3 
	GetColor(iLoop,0)
	ColArray(iLoop) = ColorRed()
	ColArray(iLoop+1) = ColorGreen()
	ColArray(iLoop+2) = ColorBlue()
Next

SetBuffer(OldBuffer)

End Function




The image I used:


hey, that's a pretty cool way of doing it :)