XNAでゲームを作っています。カメラ、背景、スクロール クラスの準備が整いました。
私が欠けているのは、カメラの位置が変わったときにスクロールが機能するように指示することだけです。そのための声明はありますか?
お気に入り:
if (cameraposition.X ""Increases"")
{
Scrolling.Update()
}
ありがとう。
古いカメラの位置を追跡し、変化するかどうかを確認する必要があります。したがって、あなたの場合は次のようになります。
if(cameraPosition.X != oldCameraPosition.X)
次のように、すべてのフレームの最後に oldCameraPosition 変数を更新します。
oldCameraPosition = cameraPosition;
両方の位置の差は通常、デルタまたは速度と呼ばれます。スクロールについては、カメラ Delta を使用して更新を呼び出すことができるため、同じ (または変更された量) をスクロールします。例えば:
//In Camera.cs
Scrolling.Update(oldCameraPosition - cameraPosition);
//In your scrolling class
void Update(Vector3 offset)
{
background.Position += offset * .5f;
}
そうすれば、カメラが移動するたびに、バックグラウンド プレーンが半分の速度で移動します。異なる修飾子でそのトリックを 3 回行うと、パラレックス効果が得られます。
通常、これにはイベントを使用しますが、ゲーム開発では例外を作成できます。イベント ループによく似たゲーム ループが既にあるため、通常はポーリングを使用します。Scrolling.Update()
いずれにせよ、そもそもカメラの位置を変更するたびに呼び出す方が理にかなっています。
それは当然のことながらパフォーマンスの選択ですが、単純に次のように言うとどうなりますか?
Scrolling.Update(cameraPosition.X, cameraPosition.Y)
スクロールがすでに有効な位置にある場合は、何も変更されません。
当然のことながら、使用前に測定する必要があります。このようにして、状態変数や追加の変数を保存して「古い」情報を保存することを回避できます。