我认为draw方法将从前到后绘制内容,因此代码中要绘制的第一个内容将在前面,最后一个将在前面。因此,我试图从一个数组中绘制一个平铺背景,但其中一些在其他所有内容之前,而另一些部分在其他所有内容后面。我该如何解决这个问题?
我的绘图代码:
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);
}这是draw方法
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); }
}
}发布于 2012-06-22 23:55:05
不,默认情况下,SpriteBatch按照绘图调用的顺序进行绘制(足够直观)。你先画的东西先画,最后画的东西最后画,放在其他所有东西的最上面。所以你想先绘制你的背景元素,然后是实体,然后是UI等等。
或者,可以在每次draw调用时指定层深度,然后通过在对SpriteBatch.Begin()的调用中指定SpriteSortMode.FrontToBack来使用自定义排序模式。图层深度是从0到1的实数,其中0是正面,1是背面。
发布于 2012-06-22 23:40:26
在调用SpriteBatch.Begin()之前,可以使用SpriteSortMode特性控制绘制对象的顺序。
进一步阅读:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritesortmode.aspx
https://stackoverflow.com/questions/11159350
复制相似问题