Hey Forumnutzer,
ich bin neu hier und auch neu im Bereich der Spieleprogrammierung.
Ich möchte Erfharungen im Erstellen von Spielen sammeln und habe daher mit einem Klon von Pong begonnen.
Ich habe auch schon ein lauffähiges Programm, allerdings scheitere ich momentan an dem letzten Schritt der Collisionserkennung Zwischen der Kugel und Anderen Objekten, wie dem Schläger.
Alle Objekte werden vektoriell Dargestellt und bewegliche besitzen einen Richtungsvektor für Bewegung. Die Kugel besitzt eine Viereckige Bounding Box.
Ich bin mit meiner Methode in der Lage eine Collision zu erkennen und auch das Abprallen klappt in 90% der Fälle, allerdings habe ich das Problem, wenn die Kugel genau auf eine Ecke, des anderen Objekts tirfft, dann wird keine Collision erkannt und die Kugel fiegt in das Objekt.
Hier mein Code...(Changedirection invertiert einen Wert der Richtungsvektors)...
|
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
|
void CGame::CheckCollision()
{
if ( ObjektList.empty() != true)
{
for ( ListIter = ObjektList.begin() ; ListIter != ObjektList.end() ; ListIter++ )
{
if ( (*ListIter) != pBall && (*(*ListIter)->GetSprite()).Collision(pRect2) == true )
{
//NEU
//pBall->ChangeDirection( (Ball.X + Ball.W ) - ( (*ListIter).X + (*ListIter)W ),
// (Ball.Y + Ball.He ) - ( (*ListIter).Y + (*ListIter).H) );
/// ALT
if ( Ball.y + Ball.h > ((*ListIter).Y && Ball.y < (*ListIter).h + (*ListIter).Y )
{
pBall->ChangeDirection('x');
}
if (Ball.x + Ball.w > ((*ListIter).X && Ball.x < (*ListIter).w + (*ListIter).X )
{
pBall->ChangeDirection('y');
}
}
}
}
}
|
Ich konnte leider nirgendwo anders eine (für mich verständliche
) Lösung für mein spezielles Problem finden.
Im Voraus schonmal Danke für eure Hilfe