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

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

11

24.05.2009, 14:09

Beschreibung

Wann tritt der Fehler auf?

Wenn der Spieler mit dem Item Clock kollidiert.
Oder Clock mit dem Boden.
Ich vermute beim löschen der Items.

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
void CGame::CollisionClock()
{

    SDL_Rect RectPlayer = m_pPlayer->GetRect ();
    list<CClock>::iterator i;

    for (i=m_lClock.begin (); i != m_lClock.end (); i++)
    {
        RectPlayer = m_pPlayer->GetRect ();
    
        if (RectPlayer.y < i->GetRect ().y + i->GetRect ().h && 
          RectPlayer.y + RectPlayer.h > i->GetRect ().y && 
          RectPlayer.x < i->GetRect ().x + i->GetRect ().w && 
          RectPlayer.x + 64 > i->GetRect ().x) 
      { 
    
          //Sound abspielen

          m_pSoundPing->PlaySound ();

          cout<<RectPlayer.x<<"      "<<RectPlayer.y<<endl;

          cout<<"Collision witch Item: Clock"<<endl; //Kontroll ausgabe


          //Der Clock das Leben "entziehen"

          i->SetALive(false);
        

          
         
        if(!i->GetALive ())
        i = m_lClock.erase(i);
        

         cout<<"Delete Item: Clock"<<endl;


         
    } 
    
    }


}




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
void CGame::RenderClock()
{
    list<CClock>::iterator i;

    for (i=m_lClock.begin (); i != m_lClock.end ();i++)
    {
     
        
        if (i->GetALive ())
        {
        
        i->Update ();
        i->Render ();
        
        }

        else
        {
        
        i->SetALive(false);
        i=m_lClock.erase (i);
        
        
        }
    }

}


Fehlermeldung?

Ja und zwar: list iterator not incrementable

Was habe ich schon versucht?

Ich habe versucht es mit dem Debugger zu debuggen. Das geht aber nicht weil er Bildschirm einfach schwarz bleibt.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

12

24.05.2009, 14:14

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
    for (i=m_lClock.begin (); i != m_lClock.end ();)
    {
     
       
        if (i->GetALive ())
        {
       
        i->Update ();
        i->Render ();
        ++i;
       
        }

        else
        {
       
        i->SetALive(false);
        i=m_lClock.erase (i);

       
        }
    }


Ansonsten löscht du einen iterator und der letzte zeigt auf ::end() und dann probierst du den nochmal zu inkrementieren, was den Fehler gibt. So, wie da oben geht es.
Jetzt musst du das nur noch in der anderen Funktion anpassen..

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

13

24.05.2009, 15:25

Das bringt rein gar nichts. Wäre ja auch irgendwie komisch weil die selbe Funktion gibt es ja auch für das Item IceCream und das ist ja im prinzip der selbe Code.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

14

24.05.2009, 16:00

Glaubs mir oder nicht. Daher kommt der Fehler..

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

15

24.05.2009, 16:26

Ich habs schon ausporbiert. Hilft nichts.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

16

24.05.2009, 16:31

Kriegst du denn jetzt immer noch den selben Fehler? - Hast dus bei beiden geändert?

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

17

25.05.2009, 16:22

Ja ich habs bei beiden geändert. Und jetzt stürzt es sogar ab bevor man das Item sieht.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

18

25.05.2009, 20:57

Neuen Code und Fehlermeldung posten...
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

19

27.05.2009, 16:46

Den neuen Code hat drakon schon gepostet. Es wurde nur ein i++; ergänzt. Fehlermeldung auch die selbe.

edit: bitte einmal löschen :(
edit2: problem hat sich erledigt auch wenn ich noch nicht weiss wieso

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

20

27.05.2009, 16:57

drakon hat nicht nur ein i++ ergänzt, sonder auch das i++ aus der for Schleife rausgenommen.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Werbeanzeige