我有一个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()
答案 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 ...我在回复之前没有更新评论