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
 
Hinweis
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 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 17. September 2011