2012-01-13 10 views
0

詳しい説明: 私は4タイル[32 x 32]のタイルセットを持っています。この例では、土、草、アスファルト、セメントと呼んでいます。
私は比較的長い芝生[96 x 32]の表面を描きたいと思います。 XNA(LinearWarp)のタイリングメカニズムを使用して、単一のDraw()コールを使用して描画する方法はありますか?XNA:タイルセットから直接タイルを引き出す方法はありますか?

私が試した:

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap,null,null); 
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; 
spriteBatch.Draw(_tileSetTexture /* 64 x 64 */, destRectangle/* 96 x 32*/, TileFrame /*32 x 32*/, Color.White, 0f , Vector2.Zero ,SpriteEffects.None, 0f); 

私はそこに別のにTexture2Dにすべてのタイルをトリミングのオプションがありますし、後で埋めるためにXNA LinearWrapのためのソース矩形の「拡張子」を使用することを知っているが、私はそれらを必要としますすべてが1つの大きなTileSetイメージに収められ、できるだけシンプルに実行されます。

答えて

0

これを行う方法はありませんが、良いことはこれを行う理由もないということです。パフォーマンス上のメリットはほとんど完全に無視できる程度です。 SpriteBatch.Draw()コールはではなく、実際にはというものを描いています。スプライト情報をバッファの最後に追加しています。SpriteBatch.End()を呼び出すと、バッファ全体が一度に描画されます。

現代のビデオカードのバッチ制限の近くに来ることはないスプライトバッチのほんの一握りを使って、スクリーン全体をタイルで数回覆うことができます。

+0

私がこれをしたい理由は、回転を使用するためです。私は、表面の1つの長い矩形を描き、それからただ一つを回転させます。私が複数のDraw()呼び出しを使用する場合、私は(再)各セグメントの開始点を計算する必要があります。 – CodinRonin

+0

あなたがしようとしていることは、 'SpriteBatch'によって提供される機能の範囲外です。なぜあなたはあなたの画像が単一のテクスチャ上にある必要がありますか? –

関連する問題