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 :) |