Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.09.2009, 20:18

2D PartikelSystem mit Clanlib

Hallo,

vllt kann mir jemand weiterhelfen ich sitz verzweifelt daran mir eine Art kleines PartikelSystem zu programmieren mit der ClanLib Api von clanlib.org

Da dort die Foren und Dokus eher sehr mau sind wollt ich hier mal mein Glück versuchen ...

Ich hab hier mal ein Bild wie es bei mir aussieht:


(Link)


So kurz zur Funktionsweise ich lege ein Strukturen-Array an, jedes Element repräsentiert ein Partikel..

So dann lad ich mittels Clanlib ein Sprite ein wo die Grafik für diesen Partikel ist dann leg ich eine Startposition fest von wo aus die Bewegung losgeht..

Dann kommt noch Gravitation und Bewegungsgeschwindigkeit zu..

Was mir noch nicht gefällt ist so der Gesamtanblick was evtl. mit meinen Zeichenvorgang zusammenhängt.

Ich zeichne das jeweilge Partikel einfach mit der Clanlib-Sprite-Draw Funktion an seiner x- und y-Position so.

Ich hab aber im Internet schon was von Billboard/Point/Vertex etc gelesen .. nun frag ich mich wie das denn so generell allgemein in Partikel-System läuft wie man die Partikel zeichnet vllt kennt ja einer Clanlib von euch und könnte mir helfen...

Den ganzen Quelltext zu posten wäre Overhead ich poste mal den Zeichenvorgang:




C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void CParticle::draw(CL_GraphicContext &gc)
{
    for(int loop=0; loop < this->numOfParticles ; loop++)
    {
        if(this->particle[loop].active == true)
        {
            //Aktuelles Partikel zeichnen

            this->particle_im.set_color(CL_Colorf(particle[loop].r,this->particle[loop].g,this->particle[loop].b,this->particle[loop].life));
            this->particle_im.draw(gc,this->particle[loop].pos.x,this->particle[loop].pos.y);

            //Partikel updaten

            particle[loop].pos.x += particle[loop].vel.x/(particle[loop].slowdown*1000);
            particle[loop].pos.y += particle[loop].vel.y/(particle[loop].slowdown*1000);

            particle[loop].vel.x += particle[loop].grav.x;
            particle[loop].vel.y += particle[loop].grav.y;

            particle[loop].life  -= particle[loop].fade;

            this->particle[loop].g      -= 0.01f;
            this->particle[loop].b      -= 0.01f;

            if(particle[loop].life < 0.0f)
            {
                this->particle[loop].life   = 1.0f;
                this->particle[loop].fade   = float(rand()%100)/1000.0f+0.005f;
                this->particle[loop].pos    = this->startpos;
                this->particle[loop].vel    = this->startvel;
                this->particle[loop].grav   = this->startgrav;
            }
        }
    }
}



Wäre für jede Hilfe dankbar ;)

2

15.09.2009, 20:34

Ok Kommando zurück :D

Wenn man natürlich die Werte nicht ändert bleibts immer gleich ;)

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

3

15.09.2009, 20:36

versuch mit die partikel mit dem größten life wert zuerst zu zeichnen.
"Don't trust your eyes: They are a hell of a lot smarter than you are"

4

15.09.2009, 20:43

Jetzt funktioniert es ja wie ich es wollte =)


(Link)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

16.09.2009, 08:58

mal ein kleiner tipp: mit alt + druck kannst du nur das aktive fenster screenshotten, sieht einfach besser aus ;)

6

16.09.2009, 15:24

Danke ;)

Werbeanzeige