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

23.05.2012, 09:30

SFML Problem beim darstellen von sf::String

Hallo Leute,

Um mein Problem zu beschreiben muss ich mal kurz ausholen.
Ich bin dabei mir meine UI zu schreiben in Codeblocks mit der SFML 1.6 . Dafür habe ich eine Abstrakte Basisklassis mit einer Funktion

C-/C++-Quelltext

1
sf::Drawable* Render_Element()
geschrieben.
Davon abgeleitet sind dann 2 Klassen einmal CUI_Button und CUI_Text.
Die Render Funktion von CUI_Button gibt ein sf::Sprite* zurück was wiederum von sf::Drawable abgeleitet ist.
Die Render Funktion von CUI_Text gibt ein sf::String zurück welches auch von sf::Drawable abgeleitet ist.
Beide Klassen werden in eine Liste gepackt. Diese Liste wird dann an anderer stelle abgefragt und die Sprites und Strings an die Draw Funktion übergeben.
Soweit so gut. Mit den Sprites gibt es auch keine Probleme. Mit den Strings bekomme ich keine Prombleme solang in ihnen keinen Text ist. Wenn sie ein Text haben hängt sich das Programm auf. Es gibt eine Meldung in der Konsole: Process returned 255 (0xFF).

Hat jemand eine Idee woran es liegt? Wenn noch Code benötigt wird Bescheid sagen.

Gruß Koschi.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werwofl

Treue Seele

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

23.05.2012, 11:54

Kannst du die Rückgabe deines Codes mal zeigen? Da wo du den String erzeugst bis dahin wo du ihn zurückgibst.

3

23.05.2012, 12:58

Kannst du die Rückgabe deines Codes mal zeigen? Da wo du den String erzeugst bis dahin wo du ihn zurückgibst.

Also hier das Erstellen des Text-Elements:

C-/C++-Quelltext

1
2
3
CUI_Text Text;
Text.Set_Text("Test");
Option_UI->Add_Element(Text);


die Set_Test Funktion in der Klasse CUI_Text

C-/C++-Quelltext

1
2
sf::String Text;
void Set_Text(std::string text) {Text.SetText(text);}


die Add_Element Funktion in der Klasse CUI_Surface

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
// Die St_UISurface
struct St_UISurface
{
    St_UISurface* Next;
    St_UISurface* Prev;
    CUI_Base* UI_Element;
};
// das Einfügen eines neuen Elements
void CUI_Surface::Add_Element(CUI_Text Element)
{
    Surface->Next = new St_UISurface;
    Surface->Next->Next = 0;
    Surface->Next->Prev = Surface;
    Surface = Surface->Next;
    CUI_Text* Temp = new CUI_Text;
    Temp->Set_Scope(Element.Get_Scope());
    Temp->Set_Position(Element.Get_Offset_X(),Element.Get_Offset_Y());
    Temp->Set_LMB_Msg(Element.Get_LMB_Msg());
    Temp->Set_RMB_Msg(Element.Get_RMB_Msg());
    Temp->Set_MouseOver_Msg(Element.Get_MouseOver_Msg());
    Temp->Set_Text(Element.Get_Text());
    Temp->Load(Element.Get_FontPath(),Element.Get_Size(),Element.Get_Style());
    Surface->UI_Element = Temp;
}

Die Render Funktion Basisklasse

C-/C++-Quelltext

1
virtual sf::Drawable* Render_Element() = 0;

Die Render Funktion der CUI_Text Klasse

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// aus der .h
class CUI_Text : public CUI_Base
{
protected:
    //
    sf::String Text;
    .
    .
    .
}
// aus der .cpp
sf::Drawable* CUI_Text::Render_Element()
{
return &Text;
}


und hier noch die Funktion zum Darstellen der Elemente aus der Klasse CSceneGraph

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void CSceneGraph::Render_Scene()
{
     do
     {
           Window->Draw(*Surface->Get_Surface_Element()->UI_Element->Render_Element());
      }
      while(Surface->Next_Element());
}


Das sollten mal so alle relevanten Programmteile sein.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige