Xna绘制订单无法正常工作

时间:2013-05-17 21:41:34

标签: c# xna

我有一个2d的Texture2D数组,它在这个数组中保存了地图的不同部分。我有一个问题,当我运行游戏时,地图绘制正确但由于某种原因,数组[0,0]纹理重叠我的所有纹理,包括我的播放器纹理和鼠标纹理。每个其他纹理都可以正常工作,因为我的鼠标和播放器纹理正确地重叠了地图。

我现在真的很困惑,因为使用嵌套的for循环将地图纹理绘制在一起。

这是我的地图绘制方法,我在Game的Draw方法中调用:

public void Draw()
{
    // Draws the Map from a 2D Array
    for (int row = 0; row < mapTexture.GetLength(0); row++)
    {
        for (int col = 0; col < mapTexture.GetLength(1); col++)
        {
            spriteBatch.Draw(mapTexture[row, col], mapPosition[row, col], Color.White);
        }//end for
    }//end for
}//end Draw()

我的实际绘制方法:

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);

    spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
    spriteBatch.Draw(mouseIcon, mouseIconPosition, Color.White);
    player.Draw();
    map.Draw();
    spriteBatch.End();

    base.Draw(gameTime);
}//end Draw()

2 个答案:

答案 0 :(得分:1)

尝试颠倒它们绘制的顺序,并使用SpriteSortMode.Deferred

答案 1 :(得分:0)

您可以尝试使用深度重载SpriteBatch.Draw方法。例如:

  

SpriteBatch.Draw(Texture2D,Vector2,Nullable,Color,Single,Vector2,Single,SpriteEffects,Single)将精灵添加到要渲染的一批精灵中,指定纹理,屏幕位置,可选的源矩形,颜色色调,旋转,原点,比例,效果和排序深度。

或者可以尝试更改绘图顺序:

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);

    spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);

    map.Draw();  // first
    player.Draw();  // second
    spriteBatch.Draw(mouseIcon, mouseIconPosition, Color.White); // third

    spriteBatch.End();

    base.Draw(gameTime);
}//end Draw()

(适用于SpriteSortMode.Deferred)

P.S。对不起谷歌翻译

oops ...我在回复之前没有更新评论