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