2D Sprite(XNA)的叠加问题

时间:2011-01-02 15:52:33

标签: xna 2d sprite

这可能是一个noob问题,但在这里......

我正在使用Visual Studio和XNA Framework(3.1),我只会为我的游戏绘制2D精灵,这里是主类中的Draw方法:

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 个答案:

答案 0 :(得分:2)

SpriteBatch.Draw方法存在一个重载,该方法提供了一个'layerDepth'参数(前面为0,后面为1)。你可以设置一个单独的精灵的layerDepth,并在SpriteBatch.Begin方法中使用spriteSortMode.BackToFront。

答案 1 :(得分:0)

好的,谢谢Steve,我做到了。 我刚刚将我的播放器SpriteBatch.Draw方法更改为SpriteBatch.Draw(X,X,(...),layerDepth) 使用layerDepth更新玩家的Y位置。 不得不使用spriteSortMode.FrontToBack:因为原点在左上角,一切都被颠倒了。 谢谢!

答案 2 :(得分:0)

史蒂夫的回答可能是最简单的,但有时立即抽签是有利的。 另一种方法是根据Y轴对列表中的玩家和对象进行排序。