У меня возникают трудности с тем, чтобы мой алгоритм обнаружения столкновений работал правильно. Я читаю данные из .txt, который содержит 0s и 1s (0s - пустые пробелы, которые нельзя пропустить). Мой алгоритм ловит иногда другие времена, когда это не так и в конечном итоге не работает. Мой текущий алгоритм размещен ниже, где sep является значением разделения, чтобы мои духи не перекрывались.C# XNA Обнаружение столкновений
private void collisionDetect()
{
float diffxleft, diffxright, diffytop, diffybottom;
float diffx, diffy;
hit = false;
foreach (Block b in blocks)
{
if (hit)
break;
if (inside(charPos, sep, b))
{
hit = true;
diffxleft = Math.Abs(charPos.X + sep - b.pos.X);
diffxright = Math.Abs(charPos.X - sep - (b.pos.X + b.rect.Width));
diffytop = Math.Abs(charPos.Y + sep - b.pos.Y);
diffybottom = Math.Abs(charPos.Y - sep - (b.pos.Y + b.rect.Height));
diffx = Math.Min(diffxleft, diffxright);
diffy = Math.Min(diffytop, diffybottom);
if (diffx < diffy)
{
charVel.X = 0;
if (diffxleft < diffxright)
charPos.X = b.pos.X - sep;
else
charPos.X = b.pos.X + b.rect.Width + sep;
}
else
{
charVel.Y = 0;
if (diffytop < diffybottom)
charPos.Y = b.pos.Y - sep;
else
charPos.Y = b.pos.Y + b.rect.Height + sep;
}
}
}
foreach (Block b in blocks)
{
b.disp.X = b.pos.X + 10 - bkgdisplay.X;
b.disp.Y = 470 - b.pos.Y;
}
charPosDisp.X = charPos.X - bkgdisplay.X;
charPosDisp.Y = 480 - charPos.Y;
}
Помощь!
Не могли бы вы немного понять, что именно не работает? Разве иногда он не обнаруживает X-столкновений или не обнаруживает столкновения Y или оба? Или он обнаруживает столкновения, но не препятствует движению игрока через «пробелы»? – davidsbro
Из лучших я могу сказать, что иногда это не время от времени обнаруживать, а другие создают стены, где их нет. Мой игрок может пройти через некоторые из стен, которые они не должны быть в состоянии, а другие - заблокированы стенами, которые на самом деле не нарисованы. – user2966964