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