Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Patikelsystem

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 08.02.2008, 07:33    Titel: Patikelsystem Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 08.02.2008, 12:05    Titel: Antworten mit Zitat

Was sollen die Partikel denn genau machen? Aus deinem Beispiel erkenne ich nicht so viel..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 08.02.2008, 13:57    Titel: Antworten mit Zitat

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. zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 10.02.2008, 14:50    Titel: Antworten mit Zitat

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 grinsen .
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz