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

Cf

Frischling

  • »Cf« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Wien

  • Private Nachricht senden

1

25.12.2007, 19:05

Problem mit der Kollisionserkennung

Wieder einmal melde ich mich mit einem Problem an alle Programmierer!!

Ich arbeite gerade an einem neuen Spiel, einziges Problem: Die Kollisionserkennung!!

Als Sie mit meinem Code nicht funktioniert hat, habe ich es mit der Kollisionserkennung aus dem Buch versucht, welche eigentlich funktionieren müsste (Schuss und Enemy bewegen Sich zwar auf der
x-Achse, aber trotzdem...)

Hier mal die ganze Klasse der Kollisionerkennung:

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
void CGame::CheckCollisions ()
{
  
  list<CShot> *ShotList = m_pPlayer->GetShotList ();

 
  list<CEnemyShot>::iterator ItEnemyShot = m_EnemyShotList.begin ();
  list<CShot>::iterator ItShot;

 
  SDL_Rect RectEnemyShot;
  SDL_Rect RectShot;

 
  while (ItEnemyShot != m_EnemyShotList.end () )
  {
    
    RectEnemyShot = ItEnemyShot->GetRect ();

  
    for (ItShot = ShotList->begin (); 
         ItShot != ShotList->end ();
         ++ItShot)
    {
     
      RectShot = ItShot->GetRect ();

    
      if (RectShot.y < RectEnemyShot.y + RectEnemyShot.h &&
          RectShot.y + RectShot.h > RectEnemyShot.y &&
          RectShot.x < RectEnemyShot.x + RectEnemyShot.w &&
          RectShot.x + RectShot.w > RectEnemyShot.x)
      {        
        ItEnemyShot->SetAlive (false);
        ItShot->SetAlive (false);
      }

    }

    
    if (ItEnemyShot->IsAlive ()==true )
      ItEnemyShot++;
    else
    ItEnemyShot=m_EnemyShotList.erase (ItEnemyShot);

  }

}


Hoffentlich kann mir jemand helfen!!

Cf

Bugger

Frischling

Beiträge: 66

Wohnort: Bezirk Freistadt

Beruf: EDVO HTL Schüler

  • Private Nachricht senden

2

25.12.2007, 22:31

Bist du dir sicher, dass die Kollosionserkennung dein Problem ist? Prüfe doch mal die einzelnen Werte im Debug- Modus ... - Soweit ich das beurteilen kann, müsste der Code bei richtigen Datenwerten keine Probleme machen.
Hältst du nicht den Bug in Ehren, wird er dich noch manches Lehren.

Ein Gespräch setzt voraus, dass der andere Recht haben könnte.

Cf

Frischling

  • »Cf« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Wien

  • Private Nachricht senden

3

26.12.2007, 11:39

...

Hab ich schon alles und nach längerem Überlegen is mir eingefallen, dass diese Kollisionserkennung auf der y - Achse stattfindet, ich benötige Sie aber auf der x - Achse, am Anfang habe ich gedacht das das funktionieren müsste, aber das tut es nicht, vielleicht liegt es daran????

Cf

Cf

Frischling

  • »Cf« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Wien

  • Private Nachricht senden

4

26.12.2007, 12:44

...

if (RectShot.x + RectShot.w > RectEnemyShot.x &&
RectShot.x < RectEnemyShot.x + RectEnemyShot.w &&
RectShot.y < RectEnemyShot.y + RectEnemyShot.h &&
RectShot.y + RectShot.h > RectEnemyShot.y)

Die Kollision wird auf der y-Achse richtig erkannt, nur auf der x -Achse verschwinden beide Schüsse sofort d.h. es gibt keine sichtbare Kollision.

Ich glaube also, dass es an den zwei oberen Anweisungen liegt!!

Hoffentlich kann mir jemand helfen.

NicoWe

Treue Seele

Beiträge: 126

Wohnort: Bielefeld / NRW

  • Private Nachricht senden

5

26.12.2007, 17:37

Versuchs mal umzukehren

Mh, so an der Kollisionserkennung dürfte nix falsch sein. Aber vllt irre ich mich. Probier doch mal die Achsen vor der Kollisionserkennung umzukehren, dadurch wäre denn doch ein Faktor ausgeschlossen. OK, raten ist zwar nicht die beste Möglichkeit aber es ist ein Anfang :D
Erfolg ist die Fähigkeit, von einem Misserfolg zum anderen zu gehen,
ohne seine Begeisterung zu verlieren.
-Winston Churchill-

Cf

Frischling

  • »Cf« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Wien

  • Private Nachricht senden

6

26.12.2007, 20:42

...

ändert leider nichts, aber danke für den tipp^^

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

7

07.01.2008, 11:20

Hallo,
das Problem liegt daran, dass bei der Kollision nur die 4 Ecken der Rects geprüft werden.
Deshalb kann es passieren, dass keine Kollision statt findet.

Ich arbeite an dem Problem, kann aber nur eine For Schleife für Pixelgenaue Kollision empfehlen.

Code steht in einem Thread der schon mehre Seiten hat ;)

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Cf

Frischling

  • »Cf« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Wien

  • Private Nachricht senden

8

09.01.2008, 15:30

...

danke für die antwort, aber ich bin jetzt soweit, dass wenn ich einen schuss auf der richtigen y position abgebe, dass der mein gegner sofort verschwindet (egal welche y-Position). ?????????

Werbeanzeige