У меня проблемы с обнаружением двумерных столкновений в моей игре.
Проблема в том, что прямоугольник моего плеера неправильно регистрирует пересечение с прямоугольниками других объектов.Происхождение прямоугольника для обнаружения столкновений в MonoGame
Мне интересно, имеет ли переменная происхождения, которую я использовал для вращения моего игрока, имеет какое-либо отношение к моей проблеме и как я могу ее исправить.
Я объясню проблему более подробно, но вот мой код: ПРИМЕЧАНИЕ: Происхождение имеет тип Vector2, угол имеет тип float, все прямоугольники столкновений имеют тип 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;
}
}
}
}
}
Проблема с этим кодом заключается в том, что мой игрок только сталкивается со стеной, когда он находится на полпути. Я еще не реализовал столкновение вправо, вверх и вниз, только для левой стороны.
Спасибо заранее для тех, кто может помочь мне ответить на этот вопрос. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Я бы рекомендовал, имеющий режим отладки, где вы рисуете окно коллизий для игрока , то станет более очевидным, что происходит – Ben
Каков размер прямоугольника столкновения? – Ben
@Ben Размер прямоугольника 32x32, который является размером и высотой символа спрайта. –