Ich habe ein paar Probleme mit 2D-Kollisionserkennung in meinem Spiel.
Das Problem ist, dass das Rechteck meines Spielers eine Kreuzung mit den Rechtecken anderer Objekte nicht korrekt registriert.Ursprung des Rechtecks für Kollisionserkennung in MonoGame
Ich frage mich, ob die Ursprungsvariable, die ich verwendet habe, um meinen Player zu drehen, irgendetwas mit meinem Problem zu tun hat und wie ich es beheben kann.
Ich werde das Problem genauer erklären, aber hier ist mein Code zuerst: HINWEIS: Herkunft ist vom Typ Vector2, Winkel ist vom Typ float, alle Kollisionsrechtecke sind vom Typ Rectangle.
//Player.Update method
//origin needs to be in update, because position of source changes for every frame of animation
origin = new Vector2(Width/2, Height/2);
playerDirection = new Vector2((float)Math.Sin(angle), (float)Math.Cos(angle));
//Updating the position of my collision rectangle
collisionRect.X = (int)position.X;
collisionRect.Y = (int)position.Y;
//Changing the values of angle while key is pressed
if (Keyboard.GetState().IsKeyDown(Keys.A))
{
angle -= 0.05f;
}
if (Keyboard.GetState().IsKeyDown(Keys.D))
{
angle += 0.05f;
}
//Updating player's position
if (Keyboard.GetState().IsKeyUp(Keys.X))
{
keyPress = false;
}
if (Keyboard.GetState().IsKeyDown(Keys.W))
{
position -= playerDirection * Speed;
}
if (Keyboard.GetState().IsKeyDown(Keys.S))
position += playerDirection * Speed;
//Checking for collision detection with background objects
if(BackgroundMaker.collisionPositions.Count >= 1)
{
foreach(Rectangle colPos in BackgroundMaker.collisionPositions)
{
if(collisionRect.Intersects(colPos))
{
if (collisionRect.X < colPos.Right)
position.X = colPos.Right;
}
}
}
}
}
Das Problem mit diesem Code ist, mein Spieler kollidiert nur mit der Wand, wenn er auf halbem Weg ist. Ich habe noch keine Kollision für die rechte, obere und untere Seite implementiert, nur für die linke Seite.
Vielen Dank im Voraus für jeden, der mir diese Frage beantworten helfen kann. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.
Ich würde empfehlen, eine Debug-Modus mit dem Sie das Kollisionsbox für den Spieler ziehen , dann wird es deutlicher, was passiert – Ben
Wie groß ist das Kollisionsrechteck? – Ben
@Ben Die Größe des Rechtecks ist 32x32, was der Größe der Breite und Höhe des Zeichen-Sprites entspricht. –