Lasst die Images zerspringen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Lasst die Images zerspringen

BeitragSo, Okt 10, 2004 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
'Nabend Leute.
Also, ich habe mich vor längerer Zeit mal genauer mit Writepixelfast auseinandergesetzt und heute nen Source wiedergefunden, der eventuell für manche hilfreich sein kann. Der Source demonstriert, wie man eine Explosion eines Image's darstellen kann. Dabei wird das Image durch lauter Pixel ersetzt, wobei die Pixel, dank einer kleinen Readpixel Routine, die Farbe des original Images besitzen. Dadurch ist die Explosion natürlich glaubwürdig, wenn das Image in lauter kleine Bestandteile zerfetzt Smile
Genug der Worte, hier der Source.
BlitzBasic: [AUSKLAPPEN]

Const gfx = 800
Const gfy = 600

Graphics gfx,gfy,32,1

SeedRnd MilliSecs()

AutoMidHandle True

Type partikel
Field x#,y#
Field winkel
Field speed
Field rgb
End Type

Type image
Field x,y ;x,y koordinaten
Field time_left ;ablaufende Zeit
Field time ;allgemein: time = millisecs()
Field pic_nr ;zufallsnummer, wodurch das zu nutzende image gewählt wird
Field image ;image des bildes
Field width,height
End Type

Global FPSSEC = MilliSecs(), FPS, FRAMES ;alles um FPS anzuzeigen
Global anz ;zeigt später die aktuelle Partikelanzahl an

SetBuffer BackBuffer()

Repeat
Cls
HidePointer() ;mauscursor weg machen :)

Different()
UpdateImages()
UpdatePartikel()
FPS()

Flip
Until KeyHit(1):End

Function NewImage(x#,y#)

imgwidth = Rand(20,50)
imgheight = Rand(20,50)

circle = CreateImage(imgwidth,imgheight)
SetBuffer ImageBuffer(circle)
Color Rand(100,255),Rand(100,255),Rand(100,255)
Oval 0,0,imgwidth,imgheight

cube = CreateImage(imgwidth,imgheight)
SetBuffer ImageBuffer(cube)
Color Rand(100,255),Rand(100,255),Rand(100,255)
Rect 0,0,imgwidth,imgheight

i.image = New image
i\x = x#
i\y = y#
i\time_left = Rand(2,5)
i\time = MilliSecs()
i\pic_nr = Rand(1,2)

Select i\pic_nr
Case 1
i\image = circle
Case 2
i\image = cube
End Select

i\width = ImageWidth(i\image)
i\height = ImageHeight(i\image)

SetBuffer BackBuffer() ;jup, wieder in den alten buffer wechseln, sonst sind wir noch im imagebuffer

End Function

Function UpdateImages()
For i.image = Each image
DrawImage i\image,i\x,i\y
Color 255,255,255
Text i\x-i\width/2,i\y-i\height,"Zeit: "+i\time_left ;ablaufende zeit wird angezeigt

If MilliSecs()-1000 => i\time
i\time = MilliSecs()
i\time_left = i\time_left - 1 ;immer eine Sekunde abziehen
EndIf

If i\time_left <= 0
CreatePartikel(i\x,i\y,i\width,i\height)
Delete i.image
EndIf
Next
End Function

Function CreatePartikel(x#,y#,breite,hoehe)
LockBuffer BackBuffer()
For i = x#-(breite/2) To x#+breite Step 3 ;bei verschiedenen größen des bildes am step rumspielen
For j = y#-(hoehe/2) To y#+hoehe Step 3
rgb = ReadPixelFast(i,j)
If rgb <> 0
p.partikel = New partikel
p\x = i
p\y = j
p\winkel = Rnd(-180,180)
p\speed = Rand(5,10)
p\rgb = rgb
anz = anz + 1
EndIf
Next
Next
UnlockBuffer BackBuffer()
End Function

Function UpdatePartikel()
For p.partikel = Each partikel

LockBuffer BackBuffer()
WritePixelFast p\x,p\y,p\rgb
UnlockBuffer BackBuffer()

p\x = p\x - Cos(p\winkel)*p\speed
p\y = p\y - Sin(p\winkel)*p\speed

If p\x < 0 Or p\x > (gfx-1) Or p\y < 0 Or p\y > (gfy-1) ;eventuelles sauber machen :)
Delete p.partikel
anz = anz - 1
EndIf

Next
End Function

Function FPS()
frames = frames + 1
If MilliSecs() - fpssec => 1000 Then
fps = frames
frames = 0
fpssec = MilliSecs()
EndIf
Return FPS
End Function

Function Different()
mx# = MouseX()
my# = MouseY()

Color 255,255,0
Plot mx#,my#

Text mx#-65,my#+10,"Click to set image"

If MouseHit(1)
NewImage(mx#,my#)
EndIf

Color 255,255,0
Text 0,0,"Frames per Second: "+FPS()
Text 0,15,"Aktuelle Partikelanzahl: "+anz
End Function



MFG
~ Hey Ho Let's Go ~
 

cavebird

BeitragSo, Okt 10, 2004 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Toll. Razz
MegaUpload.de -- Uploade bis zu 2MB pro Bild !!DEIN PARTNER IN SACHEN UPLOAD --bitte weiterempfehlen, nur so können wir bekannt werden...
 

Blitzkrieg Bop

BeitragSo, Okt 10, 2004 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm, Ironie? Smile
Wenn du deine Meinung sagen willst, sag sie so, das ich sie auch verstehe. Confused
~ Hey Ho Let's Go ~

Lord_Vader

BeitragSo, Okt 10, 2004 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey...joa coole sache is zwar net DER effekt aber ich denke wenn man den ein bisschen umschreibt auf seine spiele is das ganz nett!

Hätte gedacht die FPS wären dann auch niedriger sind ohne irgentwas 2400 ungefär ansonsten mit dauerklicken 188 Smile
 

Blitzkrieg Bop

BeitragSo, Okt 10, 2004 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja klar ist das nur ne Musterlösung.
Anpassen muss jeder! Und ja, das mit den FPS ist ganz gut, so das man das dann auch gut in seinen Games unterbingen kann.
~ Hey Ho Let's Go ~
 

BIG BUG

BeitragMo, Okt 11, 2004 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]

For p.partikel = Each partikel

LockBuffer BackBuffer()
WritePixelFast p\x,p\y,p\rgb
UnlockBuffer BackBuffer()

LockBuffer immer vor die Schleifen, nicht hinein!!!
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Blatolo

BeitragMo, Okt 11, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code kommt mir sehr bekannt vor ^^
 

Blitzkrieg Bop

BeitragMo, Okt 11, 2004 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt! Danke nochmal Blat, für gewisse Denkanstöße Wink
Ach, sry das ich net dran gedacht habe! War schon zu lange her... Rolling Eyes
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group