作業中のゲームで 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 サイドスクローラーの非常に典型的なカメラ機能のように思えます。
ただし、私が抱えている問題は、位置が正確に固定されていないことです。つまり、位置が非常に具体的に配置されていることに依存するコードも壊れています。より具体的には、クランプポイントを超えて1フレーム分の余分な動きが許可されているように見えます.
これが機能しない理由があるかどうか、または機能させるために何ができるかを誰かに教えてもらえますか? 前もって感謝します!