私が作業しているゲームでMathhelper.Clampを使用しているときに問題が発生しています。ここでは私の問題を引き起こしているコードの抜粋です: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つの余分なフレームの動きがクランプポイントを超えて許可されているように見えます。
これはうまくいかない理由があるのか、それとも動作させるためにできるのか分からない人は誰ですか?前もって感謝します!
浮動小数点精度のため2f/10fのような関数は0.2fと等しくないかもしれませんが、0.19999998〜になる可能性があります。残念ながら、デバッガはこれらを読み込み可能な形式に変換しようとするので、それを見ている。 C#で潜在的なプログラミングミスについて非常に多くの警告を発することで奇妙なことですが、これはまだ有効です。 – Marking
洞察のおかげで、浮き沈みが間違っていることに気付かなかった。私はちょうどコードを改造し、代わりにintを使うかもしれないと思う。この場合、私は分数は必要ありませんが、私がしている時代のことを心に留めておくのは間違いありません。 – Andrux51