XNA:如何让背景留在后台?

时间:2012-06-22 15:30:35

标签: c# xna

我认为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); }
        }
    }

2 个答案:

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