Есть у меня два объекта, у которых имеется свой Rectangle
Как проверить что они столкнулись я знаю:
if(obj1.rect.Intersects(obj2.rect))
{
...
}
Теперь мне нужно сделать, чтобы при столкновении первый объект останавливался, как если бы упёрся в стенку
Допустим, у меня 2 прямоугольника, мне нужно просто проверять с какой стороны произошло столкновение?
Пробовал делать так:
if(obj1.rect.Intersects(obj2.rect))
{
if(obj1.Position.X >= obj2.rect.Width - obj2.Position.X)
obj1.Position.X -= obj1.Speed;
}
Но при столкновении obj1
всё равно немного проходит сквозь obj2
Как сделать, чтобы obj1
сразу же упирался в obj2
?
Как-то так. Не тестировал, но идея должна быть понятна:
if (obj1.rect.Intersects(obj2.rect))
{
// Используем функцию Intersect из System.Drawing, которой нет в Monogame.
var overlap = System.Drawing.Rectangle.Intersect(
new System.Drawing.Rectangle(obj1.Position.X, obj1.Position.Y, obj1.rect.Width, obj1.rect.Height),
new System.Drawing.Rectangle(obj2.Position.X, obj2.Position.Y, obj2.rect.Width, obj2.rect.Height)
);
if (overlap.Width < overlap.Height)
{
// По оси X нужен меньший скачок, будем двигать по ней.
if (obj1.Speed.X > 0) // obj1 движется вправо
obj1.Position.X = obj2.Position.X - obj1.rect.Width;
else // obj1 движется влево
obj1.Position.X = obj2.Position.X + obj2.rect.Width;
}
else
{
// Будем двигать по оси Y.
if (obj1.Speed.Y > 0) // obj1 движется вниз
obj1.Position.Y = obj2.Position.Y - obj1.rect.Height;
else // obj1 движется вверх
obj1.Position.Y = obj2.Position.Y + obj2.rect.Height;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Когда я создаю ServiceReference генерируются partial классы, которые являются точной копией по полям классов, которые использует сервисЯ не нашел никакой...
Добрый день, недавно начал очень часто сталкиваться с конструкциями try / catch, обычно оформляю их так:
Не получается удалить объект с использованием EntityЕсть проект ASP
Я использую jsdom В тесте я проставил cookiesКак правильно забрать cookies? Если сделать так window