|
Tipp 0363
|
Partikelsystem
|
|
|
Autor/Einsender: Datum: |
|
Johannes Ernesti 07.10.2003 |
|
Entwicklungsumgebung:
DirectX-Version: |
|
VB 6
DirectX 8 |
|
|
Dieses Beispiel zeigt ein Partikelsystem, dass speziell für die Erzeugung von Echtzeit-Grafikeffekten gedacht ist. Solche dynamischen Effekte haben gegenüber statischen Effekten, die vorgefertigt als Bildfolge generiert wurden, den Vorteil, dass sie immer verschieden aussehen und so realistischer wirken. Außerdem kommt die Anwendung mit weniger speicherplatzfressenden Grafikdateien aus.
|
Einen kleinen Haken gibt es aber noch: Die hohe Flexibilität fällt dem Prozessor und der Grafikkarte zur Last. Damit dieser Geschwindigkeitsverlust jedoch möglichst gering bleibt, stellen wir die Partikel hardwarenah
mit DirectX 8 dar.
|
In dem Tipp wird nur das Grundkonstrukt dargestellt und ist nach
Belieben erweiterbar.
|
Der abgebildete Code bezieht sich nur auf das eigentliche Partikelsystem. Da der Code für die Initialisierung von
DirectX meist gleich bleibt, wird dieser hier nicht mehr gesondert
abgebildet.
|
|
Es folgt nun der für diesen Tipp relevante Code...
|
|
|
Option Explicit
Dim sX As Single, sY As Single
Dim Draw As Boolean
Public AnzahlPartikel As Long
Public xWind As Single
Public vY As Single
Public vX As Single
Public Grav As Single
Public Color As Long
Public Const LifeT As Long = 150
Private Type Color
r As Single
g As Single
b As Single
End Type
Private Type Partikel
X As Single
Y As Single
mX As Single
mY As Single
Speed As Single
Color As Long
LifeTime As Long
End Type
Public Partikelsystem() As Partikel
Public Sub Init_Partikelsystem(startX As Single, startY _
As Single, pColor As Long, PartikelCount As Long, _
Optional DoDraw As Boolean = True)
Dim i As Long
AnzahlPartikel = PartikelCount
ReDim Partikelsystem(AnzahlPartikel)
sX = startX
sY = startY
Color = pColor
Draw = DoDraw
For i = 0 To AnzahlPartikel
Randomize
With Partikelsystem(i)
.X = sX
.Y = sY
.mX = vX * Rnd - vX / 2
.mY = vY * Rnd
.LifeTime = Rnd * LifeT + 5
.Color = Color
End With
Next i
End Sub
Public Sub Update_Partikelsystem()
Dim AktIndex As Long
For AktIndex = 1 To AnzahlPartikel
With Partikelsystem(AktIndex)
If .LifeTime = 0 Or .Y > sY Or .X < 0 Or _
.X > ScreenWidth Then
.X = sX
.Y = sY
.mX = vX * Rnd - vX / 2
.mY = vY * Rnd
.LifeTime = Rnd * LifeT + 5
.Color = Color
End If
.mX = .mX + xWind
.mY = .mY - Grav
.X = .X + .mX
.Y = .Y - .mY
TriStrip(AktIndex) = CreateTLVertex( _
.X, .Y, 0, 1, .Color, 0, 0, 0)
End With
Next AktIndex
End Sub
Public Sub Reset_Start(startX As Single, startY As Single)
sX = startX
sY = startY
End Sub
|
|
|
|
Um dieses Beispiel ausführen zu können, wird die DirectX 8
for Visual Basic Type Library
benötigt (siehe dazu die Erläuterungen in der DirectX-Rubrik).
|
|
Windows-Version |
95 |
|
|
98/SE |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
VB-Version |
VBA 5 |
|
|
VBA 6 |
|
|
VB 4/16 |
|
|
VB 4/32 |
|
|
VB 5 |
|
|
VB 6 |
|
|
|
|
Download (6
kB)
|
Downloads bisher: [ 1045 ]
|
|
|