Kleine Partikelengine

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Blumentopf

Betreff: Kleine Partikelengine

BeitragSo, Apr 11, 2004 10:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Beschreibung
So, ich habe meine Arbeiten an der Partikelengine abgeschlossen und veröffentliche sie nun unter der GPS-Lizens. Für mich reicht sie so wie sie ist, ich brauche nur ein bischen Qualm und nen paar Wasserpsritzer Wink. Aber man muss dazu sagen: Die Befehle die im Moment vorhanden sind, sind nicht sehr ausgereift. Bewegungen und Invisible etc. muss man selber coden. Außerdem ist das ganze nicht sehr schnell und sollte nur in Maßen verwendet werden, allerdings finde ich reicht es dafür, wenn man auf einer Tileengine mal ab und zu ein bischen rauch aufgehen lassen will Wink!

Anleitung
Anleitung zur Syntax, nützliche Tipps und die Farbcodes findet ihr in der beiliegenden ReadMe-Datei.

BlitzBasic 3D wird benötigt!
http://www.crazypage.net/Stanio/particle.rar [Sourcecode/Example/Sprites/Hilfe]

Screenshots
Groß: http://www.crazypage.net/Stanio/partikel1.jpg
Groß: http://www.crazypage.net/Stanio/partikel2.jpg
user posted image

Hier der Sourcecode (funktioniert ohne ressis nicht)
Engine.bb [Sourcecode ist sehr unübersichtlich, ich weiß Wink]
BlitzBasic: [AUSKLAPPEN]
Global ParticleTexture
Global ParticleM = 999
Global ParticleE = 0
Global ParticleX = 1
Global ParticleY = 2
Global ParticleZ = 3
Global ParticleS = 4
Global ParticleW = 5
Global ParticleA = 6
Global ParticleT = 7
Global ParticleF = 8
Global ParticleC = 0

Dim Particle( ParticleM, 8 )

Global FpsA
Global FpsM = MilliSecs()
Global FpsF

Function InitParticles( filename$ )
ParticleTexture = LoadTexture( filename$, 2 )
If ParticleTexture Then Return 1
End Function

Function CreateWaterParticles( PosX%, PosY% )
CreateSingleParticle( PosX%, PosY%, 4 )
CreateSingleParticle( PosX%, PosY%, 1 )
End Function

Function CreateFireParticles( PosX%, PosY% )
CreateSingleParticle( PosX%, PosY%, 4 )
CreateSingleParticle( PosX%, PosY%, 3 )
CreateSingleParticle( PosX%, PosY%, 0 )
End Function

Function CreateRainbowParticles( PosX%, PosY% )
CreateSingleParticle( PosX%, PosY%, 0 )
CreateSingleParticle( PosX%, PosY%, 1 )
CreateSingleParticle( PosX%, PosY%, 2 )
CreateSingleParticle( PosX%, PosY%, 3 )
End Function

Function CreateSmokeParticles( PosX%, PosY% )
CreateSingleParticle( PosX%, PosY%, 4 )
End Function

Function CreateSingleParticle( PosX%, PosY%, Style% )
ParticleC = ParticleC + 1
If ParticleC > ParticleM Then ParticleC = 0
Particle( ParticleC, ParticleE ) = 1
Particle( ParticleC, ParticleX ) = PosX% + Rand( 0, 20 )
Particle( ParticleC, ParticleY ) = PosY% - Rand( 0, 20 )
Particle( ParticleC, ParticleZ ) = GraphicsWidth()
Particle( ParticleC, ParticleS ) = Style%
Particle( ParticleC, ParticleW ) = Winkel%
Particle( ParticleC, ParticleF ) = CreateSprite()
ScaleSprite Particle( ParticleC, ParticleF ), TextureWidth( ParticleTexture ), TextureHeight( ParticleTexture )
EntityTexture Particle( ParticleC, ParticleF ), ParticleTexture
If Particle( ParticleC, ParticleS ) = 0 Then
EntityColor Particle( ParticleC, ParticleF ), 255, 0, 0
Else If Particle( ParticleC, ParticleS ) = 1
EntityColor Particle( ParticleC, ParticleF ), 0, 0, 255
Else If Particle( ParticleC, ParticleS ) = 2
EntityColor Particle( ParticleC, ParticleF ), 0, 255, 0
Else If Particle( ParticleC, ParticleS ) = 3
EntityColor Particle( ParticleC, ParticleF ), 255, 255, 0
Else
EntityColor Particle( ParticleC, ParticleF ), 100, 100, 100
End If
EntityAlpha Particle( ParticleC, ParticleF ), 0.5
End Function

Function CreateParticleGroup( PosX%, PosY%, Style%, Anzahl% )
For ParticleL = 1 To Anzahl%
ParticleC = ParticleC + 1
If ParticleC > ParticleM Then ParticleC = 0
Particle( ParticleC, ParticleE ) = 1
Particle( ParticleC, ParticleX ) = PosX% + Rand( 0, 20 )
Particle( ParticleC, ParticleY ) = PosY% - Rand( 0, 20 )
Particle( ParticleC, ParticleZ ) = GraphicsWidth()
Particle( ParticleC, ParticleS ) = Style%
Particle( ParticleC, ParticleW ) = Rand( 0, 360 )
Particle( ParticleC, ParticleF ) = CreateSprite()
ScaleSprite Particle( ParticleC, ParticleF ), TextureWidth( ParticleTexture ), TextureHeight( ParticleTexture )
EntityTexture Particle( ParticleC, ParticleF ), ParticleTexture
If Particle( ParticleC, ParticleS ) = 0 Then
EntityColor Particle( ParticleC, ParticleF ), 255, 0, 0
Else If Particle( ParticleC, ParticleS ) = 1
EntityColor Particle( ParticleC, ParticleF ), 0, 0, 255
Else If Particle( ParticleC, ParticleS ) = 2
EntityColor Particle( ParticleC, ParticleF ), 0, 255, 0
Else
EntityColor Particle( ParticleC, ParticleF ), 100, 100, 100
End If
EntityAlpha Particle( ParticleC, ParticleF ), 0.5
Next
End Function

Function ShowParticles()
For ParticleL = 0 To ParticleM
If Particle( ParticleL, ParticleE ) Then
ParticleWidth = ( ( Particle( ParticleL, ParticleX ) ) * 2 ) - GraphicsWidth() + TextureWidth( ParticleTexture )
ParticleHeight = -( ( Particle( ParticleL, ParticleY ) ) * 2 ) + GraphicsHeight()-TextureHeight(ParticleTexture)
PositionEntity Particle( ParticleL, ParticleF ), ParticleWidth, ParticleHeight, Particle( ParticleL, ParticleZ )
End If
Next
End Function

Function MoveParticles( auswahl%, speed% )
If auswahl = 0 Then
For ParticleL = 0 To ParticleM
Particle( ParticleL, ParticleZ ) = Particle( ParticleL, ParticleZ ) + speed
Next
Else
Particle( auswahl%, ParticleZ ) = Particle( ParticleL, ParticleZ ) + speed
End If
End Function

Function GetFps()
FpsF = FpsF + 1
If MilliSecs() - FpsM >= 1000 Then
FpsA = FpsF
FpsF = 0
FpsM = MilliSecs()
End If
End Function


Edit: Man muss verzeihen, die Engine habe gestern Abend gegen halb zwei geschrieben Wink
Ich rule, du rulest nicht.

sbrog

BeitragSo, Apr 11, 2004 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
du könntest die partikel zu einem array zusammenfassen
 

Edlothiol

BeitragMo, Apr 12, 2004 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm... Hat er doch, oder?
 

Helloman

BeitragDi, Apr 13, 2004 9:36
Antworten mit Zitat
Benutzer-Profile anzeigen
er hat bloß PaticelM zu einem DimFeld gemacht

sbrog

BeitragDi, Apr 13, 2004 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
ich mein die variablen particlexxx

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group