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 . 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 !
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
Hier der Sourcecode (funktioniert ohne ressis nicht)
Engine.bb [Sourcecode ist sehr unübersichtlich, ich weiß ]
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] 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
|