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

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

1

26.02.2011, 18:10

Liste zeigt keine Elemente an

Hi

Ich programmierere zur Zeit eine Sprite-Engine. Die Sprites will ich in einer Liste abspeichern. Man kann im SceneManager die Funktion AddSprite aufrufen, bei der man einen Zeiger auf die Sprite Klasse übergeben muss. Dieser Zeiger wird danach in die Liste eingetragen. Die Funktion DrawAll rendert danach alle Sprites. Durch einen Iterator auf die Liste, kann ich alle Sprite durchgehen und dann kann ich die RenderFunktion der Sprites aufrufen.

Doch leider funktioniert es noch nicht ganz. Wenn ich die Engine teste, dann zeigt der Debugger die Elemente der Liste nicht an. Es steht lediglich error.

Hier ist ein Codeauschnitt:

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
veResult veSceneManager::AddSprite(veSprite * pSprite)
{
    // -------------------------------------------------------------------------
    // Das Sprite zur Szene hinzufügen
    // -------------------------------------------------------------------------

    m_lSprite.push_back(pSprite);

    return VE_OK;
}

veResult veSceneManager::DrawAll()
{
    // -------------------------------------------------------------------------
    // Alle Objekte der Szene rendern
    // -------------------------------------------------------------------------

    // Alle Sprites rendern
    for(m_SpriteIterator = m_lSprite.begin(); m_SpriteIterator != m_lSprite.end(); m_SpriteIterator++)
    {
        (*m_SpriteIterator)->RenderSprite();
    }

    return VE_OK;
}


Ein Codeausschnitt aus dem EngineTestProject

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
pSprite->CreateSprite("Data//NewPlayer.png");
    Scene.AddSprite(pSprite);

    while(!bQuit)
    {
        pCamera->SetPosition(veVector3(0.0f, 0.0f, -5.0f), veVector3(0.0f, 0.0f, 0.0f), veVector3(0.0f, 1.0f, 0.0f));

        Scene.RunScene();
    }


Die RunScene Funktion beinhaltet die DrawAll Funktion.

Ich habe ein weiteres Projekt erzeugt, ebenfalls mit listen, aber nur eine Konsolenanwendung. Dort funktioniert es allerdings einwandfrei.

Kann mir jemand helfen?

LG Patrick

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

2

26.02.2011, 22:13

Es müsste eigentlich funktionieren. Ich hoffe du beachtest aber, dass du vagabundierende Zeiger erzeugst, wenn du das Sprite löschst, aber nicht den Listeneintrag... Wäre es nicht sinnvoller, das Sprite und nicht die Adresse in der Liste zu speichern?

Ein bisschen mehr Code wäre nicht schlecht.