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

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

1

13.12.2014, 18:13

Habe ein Problem mit der STL List + SDL

Hallo,

ich habe ein Menu geschrieben welches einen Text der SDL_ttf Libary via einer Liste speichert(also über push_back). Die Liste ist eine Klassen Liste von meiner Text Render Klasse. Wenn man auf Start klickt soll das Spielszenario gerendert werden und danach soll die liste gelöscht werden, über list.clear(). Doch wenn dies passiert ist die liste zwar leer, aber das Szenario wird nicht gerendert und das Menu bleibt stehen woran liegt das?

Wenn ihr den Quellcode braucht bitte schreiben.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

13.12.2014, 18:16

Ja, Quellcode wäre schon nett.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

13.12.2014, 18:19

Funktion Hauptmenü

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
void CGame::MainMenu()
{
    SDL_Rect m_Rect;

    Font.Init("Skyl", 30);
    Font.ScreenPos(0, 0);
    m_pFontList.push_back(Font);

    TLoad->LoadLanguage();
    m_pCharList = TLoad->GetList();

    CharIt = m_pCharList.begin();

    int y = screen.y / 2 - 100;
    int i = 0;

    for (;i < m_pCharList.size() / 2 + 3; i++)
    {
        Font.Init(*CharIt, 20);

        m_Rect = Font.GetRect();

        y += m_Rect.h;

        Font.ScreenPos(screen.x - m_Rect.w, y);

        m_pFontList.push_back(Font);

        CharIt = m_pCharList.erase(CharIt);
    }

    Font.Init("v. 1.0", 20);

    m_Rect = Font.GetRect();

    Font.ScreenPos(0, screen.y - m_Rect.h);
    m_pFontList.push_back(Font);

    MainMenuRun = true;
    Init();
}


Hier wo die liste gelöscht wird:

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
void CGame::Run()
{
    while (run == true)
    {
        ProcessEvents();
        Window->Update();
        Window->Clear();

        m_pBackground->Render();    

        if (MainMenuRun == false)
        {
            for (PlanteIt = m_pPlanetList.begin(); PlanteIt != m_pPlanetList.end(); PlanteIt++)
            {
                PlanteIt->Update();
                PlanteIt->Render();
            }

            m_pPlayer->Update();
            m_pPlayer->Render();
            
            if (m_pFontList.size() != 0)
            {
                                //Hier wird beendet wenn liste != 0
                m_pFontList.clear();
            }       
        }
        else if(MainMenuRun == true)
        {       
            for (FontIt = m_pFontList.begin(); FontIt != m_pFontList.end(); FontIt++)
            {
                FontIt->Render();
            }
        }

        Window->Flip();
        Delay();
    }
}

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

13.12.2014, 18:48

Und mal durchgesteppt und Vermutungen angestellt, woran das liegen könnte?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

5

13.12.2014, 18:51

Kleiner Tip: auch mit std::List lassen sich wunderbar for-schleifen bauen (machst du ja auch schon in CGame::Run).

So ganz bin ich noch nicht durch dein Code durchgestiegen, aber du möchtest ja bestimmt glyphen rendern eines Fonts und nicht ein Font oder?

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

aktuelles Projekt:Rickety Racquet

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

13.12.2014, 18:52

Ja bin ich, ich habe öfters "Compiler Stopp Punkte" (sry weiß nicht wie die heißen) bei Visual Studio gesetzt, bin dann in jede Klasse rein und habe geguckt ob die Werte richtig sind und das waren sie. Also hatte ich gedacht es liegt an der Render Klasse aber da war auch nicht der Fehler das einzichste was mir einfällt ist das die SDL danach nicht mehr richtig Rendert oder Flippt.

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

13.12.2014, 18:54

Ja ich Render Fonts über den Surface

8

13.12.2014, 19:03

Schau dir mal deine for schleife an in MainMenu ich glaube da läuft einiges schief!

Was beinhaltet Font?
Was beinhaltet m_pCharList?
Und wo kommt dein CharIt zum Einsatz (ist ein Interator)?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Vailor1

Frischling

  • »Vailor1« ist der Autor dieses Themas

Beiträge: 42

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

9

13.12.2014, 19:08

Font ist ein Klassenverweis auf die FontRender und Lade Klasse, m_pCharList erhält die Menüpunkte von einer Load Klasse die diese aus einer Datei liest und CharIt ist der Iterator für m_pCharList.

10

13.12.2014, 19:13

...und CharIt ist der Iterator für m_pCharList.


Und wird wo in MainMenu itereiert?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige