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

TigerClaw25

unregistriert

11

07.04.2013, 22:38

Die Fehlermeldung kommt aber bei der Freigabe von m_pFontLive und m_pFontNumb

12

07.04.2013, 23:46

Hast du TTF_Quit() entfernt und an die richtige Stelle gesetzt?
Gibts noch mehr CFond-Instanzen im Projekt?

TigerClaw25

unregistriert

13

08.04.2013, 09:21

Ach so, du meinst wahrscheinlich, dass wenn ich die Instanzen von CFont freigebe und dann auch noch im Konstruktor "TTF_Quit ();" aufrufe, dass sich dann irgendwie überschneidet und es zum Fehler kommt, da eigentlich TTF_Quit (); die Freigabe übernimmt und ich die Instanzen nicht nochmal manuell freigeben muss ... meinst du das?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

08.04.2013, 10:06

TTF_Quit(); gibt keinen Font frei. Mit Überschneidung hat es auch nichts zu tun. Lies die Doku, bevor Du unbekannte Funktionen verwendest.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

15

08.04.2013, 12:30

Hier hatten wir ein ähnliches Problem:
Text mit SDL_ttf anzeigen

TigerClaw25

unregistriert

16

08.04.2013, 16:10

Mich würde jetzt mal interessieren, wie ich angebe, dass die Asteroiden erst nach 2 Treffern gelöscht werden.

Habe mir überlegt, dass ganze über eine Zählvariable zu machen. Und an der Stelle, an der die Asteroiden zerstört werden, soll das so lange nicht passieren, solange nicht eine bestimmte Anzahl oder ein Level erreicht ist. Hab da aber absolut keine Idee, in welcher Klasse ich die Variable deklariere ...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

08.04.2013, 16:16

Ja offenbar im Asteroiden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

18

08.04.2013, 16:21

Wenn du nur 2 Treffer haben willst, dann reicht auch ein boolean-Member, da braucht es keinen ganzen Integer, sind immerhin 3 Byte Ersparnis! (Jaja, ein Char braucht genausoviel wie ein boolean, kannst auch den nehmen^^)

Bei Erstellung des Asteroiden steht er auf false, wird er einmal getroffen wird er auf true gesetzt. Wird er dann nochmal erwischt, kannst du den Asteroiden löschen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

TigerClaw25

unregistriert

19

08.04.2013, 16:56

Muss jetzt überlegen, wie genau ich es in diese FUnktion einbaue ... :( Muss ich dazu SetLive ändern?

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
51
52
53
54
55
56
void CGame::CheckCollisions ()
{
    // Schussliste des Spielers holen
    list<CShot> *ShotList = m_pPlayer->GetShotList ();

    // Iteratoren für Asteroiden- und Schussliste
    list<CAsteroid>::iterator ItAsteroid = m_AsteroidList.begin ();
    list<CShot>::iterator ItShot;

    // Rects für Asteroiden und Schüsse
    SDL_Rect RectAsteroid;
    SDL_Rect RectShot;

    // Alle Asteroiden durchlaufen
    while (ItAsteroid != m_AsteroidList.end () )
    {
        // Rect des Asteroiden holen
        RectAsteroid = ItAsteroid->GetRect ();

        // Alle Schüsse durchlaufen
        for (ItShot = ShotList->begin ();
            ItShot != ShotList->end ();
            ++ItShot)
        {
            // Rect des Schusses holen
            RectShot = ItShot->GetRect ();

            // Überschneiden sich die Rects?
            if (RectShot.y < RectAsteroid.y + RectAsteroid.h &&
                RectShot.y + RectShot.h > RectAsteroid.y &&
                RectShot.x < RectAsteroid.x + RectAsteroid.w &&
                RectShot.x + RectShot.w > RectAsteroid.x)
            {
            
                // Ja, also gab es eine Kollision. Somit Schuss und
                // Asteroid deaktivieren                    
                ItAsteroid->SetAlive (false);
                ItShot->SetAlive (false);
                
                m_AsteroidDestroy++;        // Wieviele Asteroiden zerstört?
            
                // Asteriod explodiert -> Soundeffekt
                m_pSoundAsteroid->PlaySound();
                
            }
        }

        // Asteroid löschen, falls deaktiviert
        if (ItAsteroid->IsAlive () )
            ItAsteroid++;
        else
            ItAsteroid = m_AsteroidList.erase (ItAsteroid);

    }

} // CheckCollision

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (08.04.2013, 17:08)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

20

08.04.2013, 17:52

Jup. Da ein Asteroid mehrere Treffer einstecken soll würde ich SetAlive sowieso in Hit umbenennen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige