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 に答える