Verfasst: 03.11.2008 23:39
> Kanns ja hier dann nochmal posten.
yo, das wär cool!
yo, das wär cool!
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitMouse()
W.l = 1280 ;Screen-Breite
H.l = 1024 ;Screen-Höhe
If OpenScreen(W,H,32,"Vulkan Partikelstrahlen") = 0
End
EndIf
Structure dat ;Partikeldaten-Structur
x.f
y.f
oldx.l
oldy.l
xm.f
ym.f
c.w
EndStructure
NewList p.dat() ;Partikelliste erstellen
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(0)
If MouseButton(1)
For x = 1 To 5 ;Gleich 5 auf einmal für mehr Volumen
AddElement(p()) ;Neuen Partikel erstellen
;Startposition an Maus:
p()\x = MouseX()
p()\y = MouseY()
p()\oldx = MouseX()
p()\oldy = MouseY()
;Startgeschwindigkeit zufällig:
p()\xm = (Random(200)-100)/100
p()\ym = -(Random(300)/100)-4
;Zur Quradratbildungsvermeindung:
p()\ym + Abs(p()\xm)-1
;Start-Farbe:
p()\c = 511
Next
EndIf
If MouseButton(2)
ClearList(p()) ;Alle Partikel löschen
EndIf
StartDrawing(ScreenOutput())
ForEach p()
;Alte Werte merken
oldx = p()\x
oldy = p()\y
;Partikelbewegung
p()\ym + 0.05 ;Geschwindigkeit nach unten nimmt zu
p()\x + p()\xm ;X-Position wird geändert
p()\y + p()\ym ;Y-Position wird geändert
p()\c - 2 ;Farbe wird dunkler
If p()\c < 0 Or p()\y > H+10 Or p()\x < -10 Or p()\x > W+10 ;Wenn Schwarz oder außerhalb des Bildschirms
DeleteElement(p()) ;Partikel kann weg
Else
;Farbe bestimmen:
If p()\c > 256 ;Gelb nach Rot
color = RGB(255,p()\c-256,0)
Else ;Rot nach Schwarz
color = RGB(p()\c,0,0)
EndIf
;Dunkler für den alten Teil:
If p()\c-20 > 256 ;Gelb nach Rot
darkcolor = RGB(255,p()\c-256-20,0)
ElseIf p()\c-20 > 0 ;Rot nach Schwarz
darkcolor = RGB(p()\c-20,0,0)
Else
darkcolor = 0
EndIf
;Beide Teile Zeichnen:
LineXY(oldx,oldy,p()\oldx,p()\oldy,darkcolor) ;Alten Teil nochmal zeichnen
LineXY(p()\x,p()\y,oldx,oldy,color) ;Neuen Teil zeichnen
;Alte Werte eintragen:
p()\oldx = oldx
p()\oldy = oldy
EndIf
Next
Circle(MouseX(),MouseY(),4,RGB(255,255,128)) ;Maus Zeichnen
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
End
Code: Alles auswählen
;////////////////////////////////////////////////////////////////
;//
;// Project Title: MP 3D Engine
;// File Title: MP_DX9_Partikel.pb
;// Created On: 22.11.2008
;// Updated On:
;// Author: Michael Paulwitz
;// OS:Windows
;//
;// Demofile für meine Partikelengine
;//
;////////////////////////////////////////////////////////////////
;-
;- ProgrammStart
MP_Graphics3D (640,480,0,3) ; Erstelle ein WindowsFenster #Window = 0
SetWindowTitle(0, "3D Partikel Test") ; So soll es heissen
Particle.l = MP_CreateParticleEmitter() ; Fontaine mit Wind
MP_PositionEntity (Particle,3,0,0) ; Setzt ein Objekt an einen x,y,z Ort
MP_ParticleColorRange (Particle,RGB(255,255,255),RGB(255,255,255)) ; Farbe von RGB Wert zu RGB Wert
MP_ParticleEmissionRate (Particle,500,5,0.05); Maximale Partikel, Ausstoßmenge und Zeiteinheit in s dafür
MP_ParticleTimeToLive(Particle, 3, 6); Partikellebenszeit von s bis s
MP_ParticleSize (Particle,0.5); Partikelgrösse
MP_ParticleVelocity(Particle,0,5,0,1.5); Ausstossrichtung als x,y,z und Verteilungsstärke
MP_ParticleWind(Particle, 2, 0 ,0); Wind als x,y,z
Particle2.l = MP_CreateParticleEmitter() ; Explosion
MP_ParticleColorRange (Particle2,RGB(0,0,0),RGB(255,0,0)) ; Farbe von RGB Wert zu RGB Wert
MP_ParticleEmissionRate (Particle2,100,100,0.05); Maximale Partikel, Ausstoßmenge und Zeiteinheit in s dafür
MP_ParticleTimeToLive(Particle2, 0.4, 0.6); Partikellebenszeit von s bis s
MP_ParticleSize (Particle2,2); Partikelgrösse
MP_ParticleVelocity(Particle2,0,0,0,10); Ausstossrichtung als x,y,z und Verteilungsstärke
Particle3.l = MP_CreateParticleEmitter() ;Vulkan aus MPs
MP_PositionEntity (Particle3,-5,0,0) ; Setzt ein Objekt an einen x,y,z Ort
MP_ParticleColorRange (Particle3,RGB(0,0,0),RGB(255,255,255)) ; Farbe von RGB Wert zu RGB Wert
MP_ParticleEmissionRate (Particle3,100,10,0.05); Maximale Partikel, Ausstoßmenge und Zeiteinheit in s dafür
MP_ParticleTimeToLive(Particle3, 3, 4); Partikellebenszeit von s bis s
MP_ParticleVelocity(Particle3,0,5,0,2.5); Ausstossrichtung als x,y,z und Verteilungsstärke
MP_ParticleGravity(Particle3,0,-5,0) ; Gravitatio als x,y,z
Textur = MP_CreateTextureFromFileInMemory (?logostart,?logostart-?logostop)
MP_EntityTexture(Particle3,Textur)
camera=MP_CreateCamera() ; Kamera erstellen
x.f=0 : y.f=0 : z.f = -18
MP_PositionCamera(camera,x.f,y.f,z.f) ; Kameraposition
light=MP_CreateLight(1,90,0,0) ; Es werde Licht
cube=MP_CreateCube() ; Nen Würfel
MP_EntityColor (cube,100,100,255) ; Würfel färben als R,G,B Wert
While Not MP_KeyDown(#PB_Key_Escape) And Not MP_WindowEvent() = #PB_Event_CloseWindow; Esc abfrage oder schliessen
MP_DrawText (10,10,RGB(255,255,255),"Läuft mit "+Str(MP_FPS ())+" FPS") ; Textanzeige an Position x,y, Farbe RGB und Text$
MP_TurnEntity (cube,0.05,0.5,1) ; Würfel Drehen
MP_RenderWorld () ; Hier gehts los
MP_Flip () ;
Wend
End
DataSection
logostart:
IncludeBinary "c:\programme\purebasic\media\mp_logo.png" ; Mein MP Bild included
logostop:
EndDataSection