Hey
Zu meinen Problem:
Ich schreibe eine Funktion zu einen Slider, die die aktuelle Position
einstellt und dabei den "Trimmer", das Teil, was die aktuelle Position
widerspiegelt, zeichnnen soll. Das Problem liegt beim Zeichnen
des Trimmers, das sich in einer Schleife abspielt, solange
die Maus gedrückt ist. Die Abfrage zur Kollision klappt super und präzise,
nur das Zeichnen ist das Problem.
Ich kann inzwischen den Trimmer bewegen, allerdings
wird der Trimmer nicht aktiv mitbewegt, sonder nur
dann wieder gezeichnet, wenn ich die Maus loslasse.
Ich zeichne mit HW_Ptr, das ein Zeiger auf mein
Hauptfenster ist.
Die Bar_Shape ist die Form, die hinter den Trimmmer ist.
Ich kannn auch in der Schleife zum Beispiel das Fenster
schließen mit HW_Ptr->close() .... nur das besc***sene Zeichen
Der Code der Funktion:
|
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
34
35
36
37
38
39
40
41
42
|
void ui::Slider::getSettingFromMouse()
{
sf::Vector2f tempTrimmmerPos = Trimmer_Pos; // erstellt temporäre Position
Trimmer_Shape.setFillColor(ui::std_Slider_Col_Trimmer_pressed); // damit der Trimmer grün wird, wenn gedrückt
HW_Ptr->draw(Trimmer_Shape); // kurz zeichnen
sf::Time Delay; // Delay für while-Schleife
Delay = sf::milliseconds(5);
while(sf::Mouse::isButtonPressed(sf::Mouse::Left))
{
tempTrimmmerPos = sf::Vector2f(sf::Mouse::getPosition(*HW_Ptr).x,Side_L_Pos.y); //Position orientiert sich an der Sliderposition und der Mausposition
if(tempTrimmmerPos.x < Side_L_Pos.x + ui::std_Slider_Side_Siz.x) // Wenn ausser Bereich, dann auf min oder max stellen
{
tempTrimmmerPos.x = Side_L_Pos.x + ui::std_Slider_Side_Siz.x + 0.1;
}
if(tempTrimmmerPos.x > Side_R_Pos.x - ui::std_Slider_Trimmer_Siz.x)
{
tempTrimmmerPos.x = Side_R_Pos.x - ui::std_Slider_Trimmer_Siz.x - 0.1;
}
Trimmer_Shape.setPosition(tempTrimmmerPos); // Shape auf Position stellen
Trimmer_Pos = tempTrimmmerPos; // für weitere Verarbeitungen dann später im GUI
HW_Ptr->draw(Bar_Shape);
HW_Ptr->draw(Trimmer_Shape); // zuerst das Bar_Shape, dann das Trimmer_Shape
sf::sleep(Delay); // Bissi warten
}
Trimmer_Shape.setFillColor(ui::std_Slider_Col_Trimmer); // Standard Farbe
if(Type == FLUENT) // Späterer Code, nicht wichtig !
{
Trimmer_Pos_Percent;
}
else if(Type == LOCKED)
{
Trimmer_Pos_Lock;
}
}
|
Danke im Voraus,
bin bisschen verzweifelt
!