Прямоугольники не перекрывались правильно
Как вы можете видеть на верхнем углу написано COL: Ложь/True. Это если игрок ограничивается и плитки, которые являются твердыми. Прямоугольники для плит и игроков проверяются, если они перехватывают друг друга. Похоже, что он работает правильно? Ну нет. Посмотрите внимательнее.
нижний правый угол должен быть внутри плитки для того, чтобы рассчитывать.
Теперь давайте перейдем к коду, который я использовал сейчас, надеюсь, вы понимаете проблему.
игрока Bounds (Прямоугольник)
playerBounds.Width = 32;
playerBounds.Height = 64;
playerBounds.X = (int)this.position.X;
playerBounds.Y = (int)this.position.Y;
Плитка Bounds (Прямоугольник)
newTile.bounds = new Rectangle(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
Теперь на том, как он обнаруживает это:
for (int x = 0; x < Tilemap.MAP_WIDTH; x++)
{
for (int y = 0; y < Tilemap.MAP_HEIGHT; y++)
{
if (tm.tile[x, y].bounds.Intersects(playerBounds))
{
if (tm.tile[x, y].getSolid())
{
Colliding = true;
} else
{
Colliding = false;
}
}
}
}
Move
public void Move(Vector2 pos)
{
for (int i = 0; i < speed; i++)
{
position += pos;
}
}
Я использовал контрольные точки в цикле обнаружения столкновения. И прямоугольник полностью покрывает характер и плитки.
Мое первое предположение заключается в том, что либо A: Maths miscalculation, либо B: ошибка перевода геометрии, приводящая к иллюзии, что она сталкивается, когда на самом деле координат нет. – Krythic
Вы отдаете квадрат из верхнего левого начала? Или это центрированное начало, с вершинами -x/y? Это приведет к визуальной иллюзии столкновения. По существу ваш ограничивающий прямоугольник ниже и больше справа, чем фактический квадрат визуально существует. – Krythic