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

NoobEnt

Frischling

  • »NoobEnt« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Aurich, Ostfriesland

  • Private Nachricht senden

1

29.05.2011, 17:44

Irrlicht Engine Kollisionserkennungsfehler

Moin Moin

Ich habe ein Problem mit der Kollisionserkennung der Irrlicht Engine.
Die erste Kollision funktioniert und der Zombie wird entfernt.
Die zweite verursacht dann einen Fehler bei getCollisionPoint,´=/

könnt ihr helfen?

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
43
44
45
46
47
48
49
50
vector3df CGame::CheckBulletCollision()
{
    line3d<float>           m_TargetLine;

 
    m_TargetLine.start  = Camera->getAbsolutePosition();
    m_TargetLine.end    = (Camera->getTarget() - m_TargetLine.start).normalize() * 1000000.0f;          

    vector3df vCollisionPoint(0.0f, 0.0f, 0.0f);

    triangle3df Tri;
    const ISceneNode*   CollisionWithNode = NULL;
    const ISceneNode*   CollisionWithNodeZombie = NULL;
    

    g_pFramework->SMG->getSceneCollisionManager()->getCollisionPoint(m_TargetLine, m_MetaSelector, vCollisionPoint, Tri, CollisionWithNode);

    if(CollisionWithNode == HouseNodeMiddle || CollisionWithNode == HouseNodeBottom)
    std::cout<<"You shot the House!"<<std::endl;


    //Testen, ob Zombie angeschossen wurde
    
    std::list<CZombie*>::iterator ItZombie = m_ZombieList.begin();
    int iCounter = 1;

    g_pFramework->SMG->getSceneCollisionManager()->getCollisionPoint(m_TargetLine, m_MetaZombieSelector, vCollisionPoint, Tri, CollisionWithNodeZombie);
                                                                                                                                                
// HIER GIBTS BEIM ZWEITEN DURCHLAUFEN DER FUNKTION EINEN ZUGRIFFSFEHLER

    while (ItZombie != m_ZombieList.end())
    {

        if(CollisionWithNodeZombie == (*ItZombie)->GetNode())
        {
            std::cout<<"You shot zombie "<<iCounter<<std::endl;
            (*ItZombie)->Quit();
            RegenerateZombieMetaSelector(*ItZombie);
            ItZombie = m_ZombieList.erase(ItZombie);
        }
        else
        {
            ItZombie++;
        }
        iCounter++;
    }

    return vCollisionPoint;

}

NoobEnt

Frischling

  • »NoobEnt« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Aurich, Ostfriesland

  • Private Nachricht senden

2

11.06.2011, 20:07

niemand irgendeine ahnung?

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

3

13.06.2011, 15:34

"Fehler" ist eine sehr ungenaue Beschreibung. Was passiert genau? Eine Zugriffsverletzung? Bitte schreib sowas nicht nur in den Quellcode!

Wieso enthält deine Liste Pointer? Du hast bereits ein Speicherleck, der Zeiger auf den getroffenen Zombie wird zwar aus der Liste gelöscht, aber es wird nirgends delete aufgerufen. Falls dein Container auch von CZombie abgeleitete Objekte enthält, google mal nach "smartpointer" und "boost pointer container".
Beim Fehler kann ich nur raten: Wird er vielleicht in RegenerateZombieMetaSelector(*ItZombie) ein zweites Mal eingefügt?

Werbeanzeige