Mathhelper.Clamp를 사용하는 중에 문제가 발생합니다. 다음은 나에게 문제를 일으키는 코드의 조각이있다 :Mathhelper.Clamp not exact?
기본적으로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 sidescroller의 전형적인 카메라 기능처럼 보인다.
그러나 내가 겪고있는 문제는 위치가 정확히 숫자에 고정되어 있지 않다는 것입니다. 즉, 해당 위치에 의존하는 코드가 너무 세게 배치된다는 의미입니다. 좀 더 구체적으로 말하자면 클램프 지점을 초과하여 한 개의 액자가 허용됩니다.
이것이 작동하지 않아야하는 이유가 있거나 작동하도록 할 수있는 이유가 있다면 알려 줄 수 있습니까? 미리 감사드립니다!
정확히 2f/10f와 같은 함수는 부동 소수점 정확도 때문에 0.19999998 ~가 될 수 있기 때문에 0.2f와 같지 않을 수 있습니다. 불행히도 디버거가 이러한 형식을 읽을 수있는 형식으로 변환하려고하므로주의하기가 어렵습니다. 보고있다. 이상한 C#은 잠재적 인 프로그래밍 실수에 대한 경고가 너무 많지만이 중 하나는 여전히 유효합니다. – Marking
통찰력을 가져 주셔서 감사합니다. 나는 수렁이 너무 부정확하다는 것을 결코 깨닫지 못했습니다. 난 그냥 코드를 수정하고 int를 대신 사용하는 것 같아요. 이 경우에는 분수가 필요하지 않지만 시간이 지나면 분명히 염두에 둘 것입니다. – Andrux51