我认为draw方法会从前到后绘制东西,所以在代码中绘制的第一个东西将在前面,而最后一个在前面。 所以,我正在尝试从数组中绘制一个tile背景,但其中一些是在其他所有内容之前,而其他一些部分则在其他所有内容之后。我该如何解决这个问题?
我的抽奖代码:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(BackColor );
spriteBatch.Begin(SpriteSortMode.FrontToBack,BlendState.AlphaBlend,null,null,null,null,m_Camera.Transform(graphics.GraphicsDevice ));
Draw1();
base.Draw(gameTime);
}
这是绘制方法
public void Draw1()
{
DrawText();
topwall.Draw(spriteBatch);
bottomwall.Draw(spriteBatch);
for (int i = 0; i < wallsize; ++i)
{
//new GameObject(Tech[i].texture, Tech[i].Position );
Tech[i].Draw(spriteBatch);
}
Door1.Draw(spriteBatch);
Door2.Draw(spriteBatch);
//playerOne.Draw(spriteBatch);
//playerTwo.Draw(spriteBatch);
ball.Draw(spriteBatch);
drawdirt();
spriteBatch.End();
}
这绘制了背景
public void drawdirt()
{
for (int i = 0; i < world.GetUpperBound(0); ++i)
{
for (int n = 0; n < world.GetUpperBound(1); ++n) { world[i, n].Draw(spriteBatch); }
}
}
答案 0 :(得分:3)
不,默认情况下,SpriteBatch按绘制调用的顺序绘制(直观地说)。无论你先绘制什么,首先绘制,最后绘制的任何内容最后都会被绘制,最重要的是在其他所有内容之上。所以你想首先绘制背景元素,然后是实体,然后是UI等等。
或者,您可以在每个draw调用上指定图层深度,然后通过在调用SpriteBatch.Begin()时指定SpriteSortMode.FrontToBack来使用自定义排序模式。层深度是从0到1的实数,0表示前面,1表示后面。
答案 1 :(得分:0)
您可以在调用SpriteSortMode
之前使用SpriteBatch.Begin()
属性控制对象的绘制顺序。
进一步阅读:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritesortmode.aspx