Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 08.02.2008, 07:33 Titel: Patikelsystem |
|
|
Könnt ihr mir ein einfaches Code-Beispiel für ein Partikelsystem geben? Ich kann sowas überhaupt nicht.
Hier der Mist, den ich versucht habe:
Code: | Enum Boolean
FALSE
TRUE
End Enum
Screen 18, 32
Type Particle
x As Integer
y As Integer
dx As Integer
dy As Integer
gx As Integer
gy As Integer
lifetime As Integer
alive As Boolean
End Type
Dim part(127) As Particle
Dim i As Integer
For i = 0 To 127
With part(i)
.x = 400
.y = 300
.dx = 10 + Rnd*4
.dy = 10 + Rnd*4
.gx = 0
.gy = -5
.lifetime = 1000
.alive = TRUE
End With
Next
Do
Sleep 3
ScreenLock
Cls
For i = 0 To 127
If part(i).alive Then PSet (part(i).x/10, part(i).y/10), RGB(255, 255, 255)
Next i
For i = 0 To 127
With part(i)
If .lifetime <= 0 Then
.alive = FALSE
Else
.alive = TRUE
.lifetime -= 1
.x += .dx
.y += .dy
.x += .gx
.y += .gy
.gx *= .8
.gy *= .8
End If
End With
Next
ScreenUnLock
Loop Until InKey = Chr(27)
|
Nicht so das wahre...
mfG Cherry |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 08.02.2008, 12:05 Titel: |
|
|
Was sollen die Partikel denn genau machen? Aus deinem Beispiel erkenne ich nicht so viel.. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 08.02.2008, 13:57 Titel: |
|
|
Hoi,
also der Code ist ja gar nich mal so schlecht, muss ich sagen. Meine Partikelengine funktioniert eigentlich fast genau so.
Code: |
Type Particle
texture As UInteger
xi As Single
yi As Single
zi As Single
xpos As Single
ypos As Single
zpos As Single
r As Single
g As Single
b As Single
a As Single
life As Single
xg As Single
yg As Single
zg As Single
size As Single
End Type |
Das hier ist das UDT für Partikel, ähnlich wie deins. Also ich würde eine Sub für das berechnen der Partikel und eine für deren Zeichnen schreiben. Das macht die Sache flexiebler.
Code: |
Sub Del_Particle(ByRef ParticleSys As ParticleSystem, ByVal num As Integer)
ParticleSys.particles(num) = ParticleSys.particles(ParticleSys.num_paticles)
ParticleSys.num_paticles -= 1
End Sub
Sub Calc_ParticleSys(ByRef ParticleSys As ParticleSystem)
Dim i As Integer
For i = 0 To ParticleSys.num_paticles
If ParticleSys.particles(i).life > 0 Then
ParticleSys.particles(i).xpos += ParticleSys.particles(i).xi +ParticleSys.particles(i).xg
ParticleSys.particles(i).ypos += ParticleSys.particles(i).yi +ParticleSys.particles(i).yg
ParticleSys.particles(i).zpos += ParticleSys.particles(i).zi +ParticleSys.particles(i).zg
Else
Del_Particle(ParticleSys,i)
EndIf
Next
End Sub
Sub Render_ParticleSys(ByVal ParticleSys As ParticleSystem)
Dim As Integer i
For i = 0 To ParticleSys.num_paticles
If ParticleSys.particles(i).life > 0 Then
''Zeichnen
End If
Next
End Sub
|
Man sieht, dass ich noch ein zweites Type erstellt habe:
Code: |
Type ParticleSystem
particles(0 To 2000) As Particle
num_paticles As Integer
typ As Integer
reg As Integer
texture As UInteger
xi As Single
yi As Single
zi As Single
xpos As Single
ypos As Single
zpos As Single
r As Single
g As Single
b As Single
a As Single
life As Single
xg As Single
yg As Single
zg As Single
size As Single
tol As Single
End Type |
Dieses (extra-) Type ist dafür gedacht, dass in ihm die "Standard-Werte" für die Partikel gesetzt werden. In einer weiteren Sub (Create_ParticleSys) werden die Standard-Werte für jedes Partikel mit einer gewissen Abweichung übernommen. Die Toleranz für die Abweichungen lässt sich natürlich einstellen. Dieses automatische Übernehmen kann, meiner Meinung nach sehr nützlich werden, wenn man mehrere Partikelsysteme auf einmal am Laufen hat.
So würde ich das lösen, vielleicht etwas umständlich, aber es klappt.
Außerdem gibts im Exaples-Ordner noch ein Beispiel für eine Partikel-Engine in OpenGL.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 10.02.2008, 14:50 Titel: |
|
|
Hi @Cherry,
wie du schon in dem Partikelsystem von Caran siehst benutzt du besser Single/Double - Variablen für die Werte die die Position und Geschwindigkeit der Partikel beeinflussen. Das ergibt weichere (chaotische) Bewegungen statt Formationsflug eineger Partikel .
Hier ein kleines Beispiel.
Dort habe ich ScreenSync benutzt, das bringt eine gleichmäßigere Bildfolge als eine Verzögerung mit Sleep xx. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|