Я развиваю игру в свободное время в течение последних нескольких месяцев. Одной из точек привязки, которую я повторно выполнял снова и снова и не получал 100% работы, является обнаружение столкновения. Моя система (размещенная ниже) в основном работает, однако случайные вещи, похоже, происходят время от времени, например, игрок выталкивается за пределы уровня и т. Д. Учебники по этому вопросу, с которыми я столкнулся, кажутся предлагающими основные работы, т. Е. У вас есть знать объект будет по отношению к рассматриваемому объекту, но в реальной игре вы бы этого не знали. Вот моя реализация, но то, что я хочу, - это если кто-то знает хорошую систему для достижения того, что я здесь делаю.2D система обнаружения столкновения прямоугольника (которая работает в реальной игре)
Обратите внимание, что элемент исходит из коллекции IItem, которая предоставляет Rectangle и несколько других бит для каждого элемента.
public void Move(float xAdditional, float yAdditional)
{
X += xAdditional;
Y += yAdditional;
foreach (var item in Level.Items)
{
if (item != this)
{
if (item.Boundary.Intersects(this.Boundary))
{
if (item.Boundary.Top > this.Boundary.Top) //we have collided with an object below us.
{
Y = item.Boundary.Top - (this.Boundary.Height/2);
}
if(item.Boundary.Bottom < this.Boundary.Bottom)//we have collided with an object above us.
{
Y = item.Boundary.Bottom + (this.Boundary.Height/2);
}
if(item.Boundary.Left > this.Boundary.Left) //We have collided with an object to the right.
{
X = item.Boundary.Left - (this.Boundary.Width/2);
}
if(item.Boundary.Right < this.Boundary.Right)// We have collided with an object to the left;
{
X = item.Boundary.Right + (this.Boundary.Width/2);
}
}
}
}
}
Надежный ответ на столкновение - это действительно очень тяжелая проблема, чтобы получить право самостоятельно. Вы почти всегда лучше используете решение, реализованное экспертом, таким как Box2D. – Empyrean
Спасибо Empyrean, После некоторого серьезного чтения учебников я собираюсь сидеть и узнавать об использовании Farseer, основанного на Box2D. Я понимаю, я думаю. Кажется, это наиболее подходит для того, как я хотел бы работать с вещами. Увидев его в действии, его немного не хватает. – Nick