Я столкнулся с проблемой при использовании Mathhelper.Clamp в игре, над которой я работаю.Вот фрагмент кода, который вызывает у меня проблемы:
if (background.position.Y == 0)
{
player.position.Y = MathHelper.Clamp(player.position.Y, 0, viewport.Height / 2);
}
if (Math.Abs(background.position.Y) == background.sprite.Height - viewport.Height / 2)
{
player.position.Y = MathHelper.Clamp(player.position.Y, viewport.Height / 2, viewport.Height - player.sprite.Height);
}
if (player.position.Y == viewport.Height / 2)
{
background.position.Y = MathHelper.Clamp(background.position.Y, -(background.sprite.Height - viewport.Height / 2), 0);
}
По сути, я надеюсь достичь (начиная с x, 0) позволить спрайту игрока двигаться вниз, пока он не достигнет серединыэкран, затем фон будет перемещаться вместо этого, пока он не достигнет нижней части фона минус половина высоты экрана, затем спрайт игрока снова будет двигаться, пока не достигнет нижней части экрана.(У меня есть код, чтобы это произошло) - Мне кажется, это довольно типичная функциональность камеры для 2D бокового скроллера.
Однако проблема, с которой я столкнулся, заключается в том, что позиции не сжимаются точно начисла, которые они должны быть, а это значит, что код, который полагается на то, что они размещены таким образом, тоже ломается.Чтобы быть более конкретным, похоже, что за точку зажима допускается перемещение на один дополнительный кадр.
Может кто-нибудь сказать мне, если есть причина, почему это не должно работать, или что я могу сделать, чтобы сделатьэто работает?Заранее спасибо!