首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XNA:如何让后台留在后台?

XNA:如何让后台留在后台?
EN

Stack Overflow用户
提问于 2012-06-22 23:30:35
回答 2查看 3.7K关注 0票数 1

我认为draw方法将从前到后绘制内容,因此代码中要绘制的第一个内容将在前面,最后一个将在前面。因此,我试图从一个数组中绘制一个平铺背景,但其中一些在其他所有内容之前,而另一些部分在其他所有内容后面。我该如何解决这个问题?

我的绘图代码:

代码语言:javascript
复制
   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方法

代码语言:javascript
复制
    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();
    }

这将绘制背景

代码语言:javascript
复制
    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); }
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2012-06-22 23:55:05

不,默认情况下,SpriteBatch按照绘图调用的顺序进行绘制(足够直观)。你先画的东西先画,最后画的东西最后画,放在其他所有东西的最上面。所以你想先绘制你的背景元素,然后是实体,然后是UI等等。

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

票数 3
EN

Stack Overflow用户

发布于 2012-06-22 23:40:26

在调用SpriteBatch.Begin()之前,可以使用SpriteSortMode特性控制绘制对象的顺序。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11159350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档