XNA: Есть ли способ нарисовать плитку из набора плиток напрямую? - PullRequest
0 голосов
/ 13 января 2012

Разработать: У меня есть набор плиток с 4 плитками [32 х 32]. Для примера давайте назовем их Грязь, Трава, Асфальт, Цемент.
Я хочу нарисовать относительно длинную поверхность Грасса [96 х 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 голосов
/ 13 января 2012

Нет никакого способа сделать это, но хорошая новость заключается в том, что также нет причин делать это.Выигрыш в производительности почти наверняка будет совершенно незначительным.Помните, что SpriteBatch.Draw() вызов не на самом деле ничья;он добавляет информацию о спрайте в конец буфера, и весь этот буфер отрисовывается все сразу, когда вы вызываете SpriteBatch.End().

Вы можете покрывать весь экран плитками несколько раз, используя только несколько спрайтов, которые не будут приближаться к пределу количества партий на современной видеокарте.

...