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

41

26.04.2013, 08:17

Das hatte ich sowieso vor. Bezueglich der Formationen dachte ich anfaenglich vereinfacht einfach an eine if Abfrage, die prueft, ob bereits ein Gegner existiert. Ist das der Fall, wird der zweite Gegner einfach rechts oder Links davon gesetzt, aehnlich einer Kollisionsabfage.

Werde mein glueck irgendwie versuchen.

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

42

27.04.2013, 13:57

Mach es doch nicht so kompliziert. Du erstellst die 5 Gegner doch ganz bewusst, also gebe ihnen einfach die passenden Startpositionen und starte die Animation. Dann müsste man sich vielleicht nur an den Umkehrpunkten Gedanken machen, ob das alles so passt.

TigerClaw25

unregistriert

43

27.04.2013, 19:45

hmm, also ich habe jetzt einfach eine for-Schleife erstellt, die mir alle paar Sekunden fünf Gegner erzeugt ... jetzt kommt das Feintuning :) Also beispielweise, dass nach einer bestimmten Zeit neue Gegnertypen erzeugt werden. Werde das mit einem Timer in der Game-FUnktion lösen, der die Zeit seit dem Start des Spiels enthält.

TigerClaw25

unregistriert

44

02.05.2013, 12:10

Genial, wollte, dass die Schüsse des Gegners mich treffen, stattdessen wird der Gegner von meine Schüssen zerstört.

Laut dieser Zeile dürfte das garnicht sein: list<CShot> *ShotListEnemy2 = m_pEnemy->GetShotList ();
list<CShot>::iterator ItShotEnemy2;

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
//
    // Kollision zwischen Gegner und Spielerschuss /////////////////////////////////////////////////
    //
    
    // Schussliste des Gegners holen
    list<CShot> *ShotListEnemy2 = m_pEnemy->GetShotList ();
    list<CShot>::iterator ItShotEnemy2;

    // Iteratoren für Asteroiden- und Schussliste sowie Explosionsliste
    list<CEnemy>::iterator ItEnemy = m_EnemyList.begin ();
    list<CShot>::iterator ItShot2;

    SDL_Rect RectEnemy;
    SDL_Rect RectShot2;

    // Alle Asteroiden durchlaufen
    while (ItEnemy != m_EnemyList.end () )
    {
        // Rect des Gegners holen
        RectEnemy = ItEnemy->GetRect ();

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

            // Überschneiden sich die Rects?
            if (RectShot2.y < RectEnemy.y + RectEnemy.h &&
                RectShot2.y + RectShot2.h > RectEnemy.y &&
                RectShot2.x < RectEnemy.x + RectEnemy.w &&
                RectShot2.x + RectShot2.w > RectEnemy.x)
            {       
                // Ja, also gab es eine Kollision. Somit Schuss und
                // Asteroid deaktivieren
                ItEnemy->SetAlive (false);
                ItShot2->SetAlive (false);
                // Gegner explodiert -> Soundeffekt
                m_pSoundAsteroid->PlaySound();  
                // Explosion erstellen
                SpawnExplosion ((RectEnemy.x), (RectEnemy.y));  
            }
        }

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

} // CheckCollision

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

45

02.05.2013, 12:16

Wenn ShotListEnemy2 irgendwo verwendet werden würde, dann hättest Du vielleicht auch Recht. Aber solange Du das nicht machst, stimmt es natürlich nicht.

Mal ganz ehrlich, macht es eigentlich Spaß wegen jedem Bug auf Antwort im Forum zu hoffen oder zu warten? Programmieren heißt Probleme zu erschaffen und sie selbst wieder zu lösen. Nicht sich was auszudenken, irgendwas hinschzureiben und dann andere darum zu bitten es zu fixen.
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]

TigerClaw25

unregistriert

46

02.05.2013, 14:03

Habs gemerkt, aber leider komme ich mit dem Debugger nicht weiter.

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
//
    // Kollision zwischen Gegner und Spielerschuss /////////////////////////////////////////////////
    //
    
    // Schussliste des Gegners holen
    list<CShot> *ShotListEnemy2 = m_pEnemy->GetShotList ();

    // Iteratoren für Schussliste
    list<CShot>::iterator ItShot2;

    SDL_Rect RectShot2;
    SDL_Rect RectPlayer2;

    // Rect des Spielers holen (Erweitert)
        RectPlayer2 = m_pPlayer->GetRect();

    
        // Alle Schüsse durchlaufen
        for (ItShot2 = ShotListEnemy2->begin ();
            ItShot2 != ShotListEnemy2->end ();
            ++ItShot2)
        {
            // Rect des Schusses holen
            RectShot2 = ItShot2->GetRect ();

            // Überschneiden sich die Rects?
            if (RectShot2.y < RectPlayer2.y + RectPlayer2.h &&
                RectShot2.y + RectShot2.h > RectPlayer2.y &&
                RectShot2.x < RectPlayer2.x + RectPlayer2.w &&
                RectShot2.x + RectShot2.w > RectPlayer2.x)
            {       
                // Ja, also gab es eine Kollision. Somit Schuss und
                // Asteroid deaktivieren
                ItShot2->SetAlive (false);
                m_pPlayer->SetHealth();
                m_pPlayer->Reset();
                // Asteriod explodiert -> Soundeffekt
                m_pSoundAsteroid->PlaySound();
            }
        }


Es stürzt immer in der for-Schleife ab ... finde den Fehler einfach nichtz ...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

47

02.05.2013, 14:05

Und jetzt sollen wir raten in welcher Zeile genau?
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]

TigerClaw25

unregistriert

48

02.05.2013, 14:08

for (ItShot2 = ShotListEnemy2->begin ();
ItShot2 != ShotListEnemy2->end ();
++ItShot2)

Laut debugger :)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

49

02.05.2013, 14:10

Und welchen Wert hat "ShotListEnemy2" zu diesem Zeitpunkt?
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]

TigerClaw25

unregistriert

50

02.05.2013, 14:15

NULL

Werbeanzeige