2

私は C# と XNA を使用しており、ゲームでスクロールする背景を作成したいと考えています。

ある方向に無期限に移動するスクロール テクスチャを実装する最善の方法を見つけようとしています。星のある宇宙の背景を考えてみましょう。そのため、船が移動するとテクスチャが行われますが、反対方向になります。「タイリング」モードのようなものです。

これまでの私の唯一の推測は、たとえば左に移動している 2 つのテクスチャをレンダリングし、可視性を超えたときに最も左のテクスチャを右にジャンプさせるか、これに似たものにすることです。

それで、XNAでそれを行う簡単な方法、おそらくいくつかのレンダリングモードがあるのではないかと思っていましたか、それとも私が説明した方法で十分でしょうか? 物事を過度に複雑にしたくないだけです。私は明らかに最初にグーグルを試みましたが、ほとんど何も見つかりませんでしたが、多くのゲームも同様のテクニックを使用していることを考えると奇妙です.

4

2 に答える 2

2

仮説

スクロールする背景画像は、XNA SpriteBatchクラスを使用して簡単に実装できます。Drawメソッドには、呼び出し元がソース四角形を指定できるオーバーロードがいくつかあります。このソース四角形は、画面上の指定された宛先四角形に描画されるテクスチャのセクションを定義します。

ここに画像の説明を入力

ソース矩形の位置を変更すると、宛先矩形に表示されるテクスチャのセクションが変更されます。

スプライトが画面全体を覆うようにするには、次の宛先長方形を使用します。

var destination = new Rectangle(0, 0, screenWidth, screenHeight);

テクスチャ全体を表示する必要がある場合は、次の宛先長方形を使用します。

var source = new Rectangle(0, 0, textureWidth, textureHeight);

ソース矩形の X 座標と Y 座標をアニメーション化するだけで完了です。

さて、ほぼ完了しました。ソースの四角形がテクスチャ領域の外に移動した場合でも、テクスチャは再び開始する必要があります。これを行うには、 texture wrapを使用するSamplerStateを設定する必要があります。幸いなことに、SpriteBatch のBeginメソッドでは、カスタム SamplerState を使用できます。次のいずれかを使用できます。

// Either one of the three is fine, the only difference is the filter quality
SamplerState sampler;
sampler = SamplerState.PointWrap;
sampler = SamplerState.LinearWrap;
sampler = SamplerState.AnisotropicWrap;

// Begin drawing with the default states
// Except the SamplerState should be set to PointWrap, LinearWrap or AnisotropicWrap
spriteBatch.Begin(
    SpriteSortMode.Deferred, 
    BlendState.Opaque, 
    SamplerState.AnisotropicWrap, // Make the texture wrap
    DepthStencilState.Default, 
    RasterizerState.CullCounterClockwise
);

// Rectangle over the whole game screen
var screenArea = new Rectangle(0, 0, 800, 600);

// Calculate the current offset of the texture
// For this example I use the game time
var offset = (int)gameTime.TotalGameTime.TotalMilliseconds;

// Offset increases over time, so the texture moves from the bottom to the top of the screen
var destination =  new Rectangle(0, offset, texture.Width, texture.Height);

// Draw the texture 
spriteBatch.Draw(
    texture, 
    screenArea, 
    destination,
    Color.White
);
于 2012-12-31T18:24:32.897 に答える
1

Microsoft には、まさにこれを行う XNA チュートリアルがあります。ソース コードを取得して、スクロールする背景の背後にある実際のプログラミング ロジックを読むことができます。ボーナス ポイントは、素晴らしい効果を得るために視差スクロールを行うことです。

リンク: http://xbox.create.msdn.com/en-US/education/tutorial/2dgame/getting_started

于 2012-12-31T18:31:32.963 に答える