Проблема суперпозиции с 2D спрайтами (XNA) - PullRequest
0 голосов
/ 02 января 2011

Это может быть нубский вопрос, но вот он ...

Я использую Visual Studio с XNA Framework (3.1) и собираюсь рисовать только 2D спрайты для своей игрыэто метод ничьей в основном классе:

GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);
            background.Draw(this.spriteBatch);
            player1.Draw(this.spriteBatch);
            player2.Draw(this.spriteBatch);
            spriteBatch.End();
            base.Draw(gameTime);

Проблема в том, что player2 перекрывает player1 (потому что он тянет после), и я хотел бы, чтобы самый младший из 2 игроков (по ихположение) рисовать в последнюю очередь (для имитации глубины).

Заранее спасибо!(и извините за мой английский, я французский ...)

Ответы [ 3 ]

2 голосов
/ 02 января 2011

Существует перегрузка метода SpriteBatch.Draw, который предлагает параметр layerDepth (от 0 для передней части до 1 для задней части).Вы можете установить индивидуальный спрайт layerDepth и использовать spriteSortMode.BackToFront в методе SpriteBatch.Begin.

0 голосов
/ 07 января 2011

Ответ Стива, вероятно, самый простой, но иногда Немедленное рисование выгодно.Альтернативой является сортировка ваших игроков и объектов в списке на основе их оси Y.

0 голосов
/ 02 января 2011

Хорошо, благодаря Стиву, я сделал это.Я просто изменил свой метод SpriteBatch.Draw игрока на SpriteBatch.Draw (X, X, (...), layerDepth), где layerDepth обновляется с позицией Y игроков.Пришлось использовать spriteSortMode.FrontToBack: все было наоборот, потому что источник находится в верхнем левом углу.Спасибо!

...