1

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

这是绘制方法

    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); }
        }
    }
4

2 回答 2

3

不,默认情况下,SpriteBatch 会按照绘制调用的顺序进行绘制(足够直观)。无论你先画什么,都会先画,最后画的画就会最后画,最重要的是。所以你想先画你的背景元素,然后是实体,然后是 UI 等等。

或者,您可以在每次绘制调用中指定层深度,然后通过在调用 SpriteBatch.Begin() 时指定SpriteSortMode.FrontToBack来使用自定义排序模式。层深度是从 0 到 1 的实数,其中 0 表示前面,1 表示后面。

于 2012-06-22T15:55:04.853 回答
0

您可以使用调用SpriteSortMode之前的属性来控制对象的绘制顺序。SpriteBatch.Begin()

进一步阅读:http: //msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritesortmode.aspx

于 2012-06-22T15:40:26.477 回答