Partikelexplosion von gag
[color=darkblue:9e36a30ddf]Hier die Grundlage einer Partikelexplosion.[/color:9e36a30ddf]
Als Bild kommt ein beliebiges bis 1024x768 in Frage
Mit der Variable Lebenmax läßt sich die "Lebensdauer" der Pixel ändern.

Demnächst werde ich den Code um Farbeffekte erweitern, wie z.B. das "aufglühen" oder "verbluten" :wink:

[code:1:9e36a30ddf]
; Pixel-Explosion
Graphics 1024,768,32,1
SetBuffer BackBuffer()


Dim Pixel(787000,6)

; Feld 1 = x
; Feld 2 = y
; Feld 3 = rgb
; Feld 4 = acc x
; Feld 5 = acc y
; Feld 6 = Lebenszeit

Global Bild = LoadImage ("Bild.bmp")
Global imgw = ImageWidth(Bild)
Global imgh = ImageHeight(Bild)
Global bx = 512-(imgw/2); zentrieren
Global by = 384-(imgh/2)
Global Anzahl
Global Lebenmax = 60
DrawImage Bild , bx,by
Flip

Auslesen()

Text 400,100, "Taste für Explosion"
Text 400,120,Anzahl +" Pixel"
Flip
Cls
WaitKey()

Anzeige()

End

;----------------------------------
End

Function Auslesen()
i = 1
ymax = by + imgh
xmax = bx + imgw
DrawImage Bild , bx,by
LockBuffer

For y = by To ymax
For x = bx To xmax
rgb = ReadPixelFast(x,y)

If rgb <> 0; kein Schwarz
Pixel(i,1) = x
Pixel(i,2) = y
Pixel(i,3) = rgb
Pixel(i,4) = Rnd (-20,20)
Pixel(i,5) = Rnd (-20,20)
Pixel(i,6) = Rnd (2,Lebenmax)
i = i+1
EndIf
Next
Next
UnlockBuffer
Anzahl = i
End Function

Function Anzeige()
Cls



For z = 1 To Lebenmax
Cls
LockBuffer
For i = 1 To Anzahl Step 2
Pixel(i,6) = Pixel(i,6)-1
x = Pixel(i,1)+Pixel(i,4)
y = Pixel(i,2)+Pixel(i,5)
If x>1024 Or x<0 Or y>768 Or y<0 ;außerhalb des Bildschirms? (bei LockBuffer notwendig)
pixel(i,6) = 0
EndIf

If Pixel(i,6) >0 ; noch am Leben?
Pixel(i,1) = x
Pixel(i,2) = y
WritePixelFast (x,y,Pixel(i,3))
EndIf
Next
UnlockBuffer
Flip
If KeyDown(1) Then End
Next
End Function
[/code:1:9e36a30ddf]
===
von ???
Hi!
super gemacht!
ich habe das mal mit den b3d logo ausprobiert, und es sieht
echt geil aus. Leider werden irgendwie keine farbigen Pixel
unterstützt ?oder doch? , ich sehe jedenfalls irgendwie nur
weiße.
mfg olli
===
von ???
@Freax: Auf jeden Fall werden farbige Pxel unterstützt :D
Ich habs grad nochmal probiert.
===
von ???
Hi!
OK Du hast recht!
sieht nur so aus bei dem b3d logo, da es sehr viel weiß enthält...

mit dem code hier kann man das mit den Farben sehen:
[code:1:62084d3261]
Dim Pixel(787000,6)

; Feld 1 = x
; Feld 2 = y
; Feld 3 = rgb
; Feld 4 = acc x
; Feld 5 = acc y
; Feld 6 = Lebenszeit

Global Bild = CreateImage(256,256)
SetBuffer ImageBuffer(Bild)
For I = 0 To 100
Color Tan(I) * 100 + 100,255,Sin(I) * 50 + 50
Rect Rnd(256),Rnd(256),Rnd(40),Rnd(40)
Next
SetBuffer BackBuffer()
Global imgw = ImageWidth(Bild)
Global imgh = ImageHeight(Bild)
Global bx = 512-(imgw/2); zentrieren
Global by = 384-(imgh/2)
Global Anzahl
Global Lebenmax = 60
DrawImage Bild , bx,by
Flip

Auslesen()

Text 400,100, "Taste für Explosion"
Text 400,120,Anzahl +" Pixel"
Flip
Cls
WaitKey()

Anzeige()

End

;----------------------------------
End

Function Auslesen()
i = 1
ymax = by + imgh
xmax = bx + imgw
DrawImage Bild , bx,by
LockBuffer

For y = by To ymax
For x = bx To xmax
rgb = ReadPixelFast(x,y)

If rgb <> 0; kein Schwarz
Pixel(i,1) = x
Pixel(i,2) = y
Pixel(i,3) = rgb
Pixel(i,4) = Rnd (-20,20)
Pixel(i,5) = Rnd (-20,20)
Pixel(i,6) = Rnd (2,Lebenmax)
i = i+1
EndIf
Next
Next
UnlockBuffer
Anzahl = i
End Function

Function Anzeige()
Cls



For z = 1 To Lebenmax
Cls
LockBuffer
For i = 1 To Anzahl Step 2
Pixel(i,6) = Pixel(i,6)-1
x = Pixel(i,1)+Pixel(i,4)
y = Pixel(i,2)+Pixel(i,5)
If x>1024 Or x<0 Or y>768 Or y<0 ;außerhalb des Bildschirms? (bei LockBuffer notwendig)
pixel(i,6) = 0
EndIf

If Pixel(i,6) >0 ; noch am Leben?
Pixel(i,1) = x
Pixel(i,2) = y
WritePixelFast (x,y,Pixel(i,3))
EndIf
Next
UnlockBuffer
Delay 50
Flip
If KeyDown(1) Then End
Next
End Function
[/code:1:62084d3261]
habe mal ein delay 50 hinein gebaut, da BB einfach zu schnell ist :D
mfg olli



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: