XNA:有没有办法直接从tileset中绘制tile?

时间:2012-01-13 10:49:26

标签: xna tiles

详细说明: 我有一个有4个瓷砖[32 x 32]的瓷砖组。为了这个例子,我们称之为污垢,草,沥青,水泥 我想绘制一个相对较长的草面[96 x 32]。有没有办法使用XNA(LinearWarp)的平铺机制来使用单个Draw()调用来绘制它们?

我试过了:

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,但我需要将它们全部放在一个大的TileSet图像中,然后执行它尽可能简单。

1 个答案:

答案 0 :(得分:0)

没有办法做到这一点,但好消息是没有理由这样做。性能优势几乎可以肯定是完全可以忽略不计的。请记住,SpriteBatch.Draw()来电并非真正吸引任何东西;它将精灵信息添加到缓冲区的末尾,并在调用SpriteBatch.End()时一次性绘制整个缓冲区。

您只需使用少数精灵批次就可以在整个屏幕上覆盖整个屏幕几次,这在现代视频卡上不会接近批量限制。