Я делаю простую игру. Мне удалось заставить моего персонажа двигаться со стрелками и стрелять. Я добавил некоторые стены к карте, которые являются изображениями. Мне удалось обнаружить коллизию, как это: «! Colision»Обнаружение столкновений и перемещение стоп-кадра
private void timer6_Tick(object sender, EventArgs e){
foreach (PictureBox pic in brick){
if (pic.Bounds.IntersectsWith(pb_sprite.Bounds)){
Console.WriteLine("Colision!");
switch (rotation){
case "up":
canup = false;
candown = true;
canleft = true;
canright = true;
break;
case "down":
canup = true;
candown = false;
canleft = true;
canright = true;
break;
case "left":
candown = true;
canup = true;
canleft = false;
canright = true;
break;
case "right":
candown = true;
canup = true;
canleft = true;
canright = false;
break;
}
}
else
{
Console.WriteLine("No colision?!");
}
}
}
Это работает, как ожидалось, но в ближайшее время, как я попал в объект (стена), я получаю эхо, которое в порядке, это также останавливает движение в том направлении, с которым столкнулся персонаж, когда произошло столкновение. Дело в том, что когда я выхожу из столкновения, один из этих bools остается ложным, что мешает моему персонажу снова двигаться в том же направлении. Я попробовал установить все эти bools в true in else branch, но поскольку есть пять стен, даже если есть столкновение, другая ветка выполняется 4 раза из 5. Мне нужна какая-то «любая» функция, чтобы проверить, нет ли НИКАКИХ или ЛЮБЫХ стенок будучи ударом в один момент.
Вы можете проверить столкновение на вашем 'movement' функции -assuming у вас есть одно, а не внутри' Timer', и если вы обнаружили столкновение, вы делаете не допускайте этого движения. – uTeisT
Рассмотрите другой подход: пользователь вводит * команду *. Затем вы * оцениваете команду в контексте игры *, и команда либо * одобрена *, либо * отрицается *. Если он одобрен, персонаж перемещается в указанном направлении; если отрицается, ничего не происходит. Я думаю, что если вы структурируете свою игру с использованием этого шаблона, многие ваши проблемы исчезнут. –