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

26.02.2012, 20:31

SFML Stroke läuft sehr langsam

Hallo!
Hat mal jemand die Stroke-Klasse für die SFML 1.6 ausprobiert?
Ich habe die Klasse auf SFML 2 portiert. Mit 1.6 habe ich sie nie ausprobiert.
Nun haut die Calculate Funktion ab dem 3. Frame extrem rein.
Die ist ja so:

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
void Stroke::Calculate(float time_interval)
{
    // Deleting unwanted points
    if(!joints.empty())
        /* Removing if
        - max joint counter is reached
        - max lenght is reached
        - points life is passed*/
        while((joints.size() > max_joints && max_joints) || (GetLenght() > max_lenght && max_lenght) || (time - joints[0].birth_time > joint_lifetime && joint_lifetime > 0))
        {
            joints.pop_front();
            is_compiled = false;
            is_lenght_compiled = false;
            if(joints.empty())
                break;
        }

    // Moving lefting points
        if(joint_linear_speed != sf::Vector2f(0.f, 0.f))
    {
        for(unsigned int i = 0; i < joints.size(); i++)
        {
            joints[i].position += joint_linear_speed * time_interval;
            joints[i].upper_point += joint_linear_speed * time_interval;
            joints[i].lower_point += joint_linear_speed * time_interval;
        }
    }

    time += time_interval;
}

Nun habe ich dann also das Vergnügen, dass bei der ersten While-Schleife beim Debuggen die Sammlung joints eine Größe von mehr als einer Viertel Million hat, jedenfalls beim Feuer.
Man merkt auch beim hinzufüge der Joints, dass es dort schon mal etwas länger dauert.
Mein Computer ist jetzt nicht gerade der, der zu den langsameren gehört. Letztlich soll es ja auch eine möglichst große Bandbreite haben und Nutzer, die nicht so viel Hardware haben, sollten das Spiel oder das jeweilige Programm ja trotzdem nutzen können.
Irgendeine Idee zur Optimierung oder Ähnliches?

MfG
Check

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Checkmateing« (26.02.2012, 21:12)


2

02.03.2012, 19:48

Nein? :(

MfG
Check

idontknow

unregistriert

3

02.03.2012, 20:37

Ich hab in der SFML 1.6 Doku gekuckt (auf der offiziellen Seite) und nichtmal diese "Stroke" Klasse gefunden.. was macht die?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

02.03.2012, 20:47

Hab dazu das hier gefunden, bezüglich Verwendungszweck.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige