在spritebatch的不同Begin()和End()块中的layerdepth

时间:2011-04-28 15:21:15

标签: xna sprite

我有两种不同的绘制方法,其中一种是Game1.Draw()  另一个是DrawableGameComponent.Draw()当我尝试在DrawableGameComponent的draw方法中使用layerdepth绘制字符串时,它不起作用,它正在绘制到spritebatch的前面,layerdepth值不影响绘图。

那么问题是什么,我怎样才能提供layerdepth效果?

2 个答案:

答案 0 :(得分:3)

精灵只在一个SpriteBatch开始/结束块中排序,它不可能对在不同的开始/结束块中绘制的精灵进行排序。

如果你想要实现分层效果,你需要确保所有的绘图都在一个开始/结束块中进行,或者切换到延迟的绘制并对绘制的顺序进行更精细的控制事物(画家算法)

答案 1 :(得分:2)

要使用sprite批处理进行排序,您需要使用接受SpriteSortMode的overloads之一开始您的spritebatch

然后将SpriteSort mode设置为BackToFront或FrontToBack,然后使用spriteBatch进行绘制。 Draw overload接受一个layerDepth,它是一个浮点数,你可以在0.0~1.0之间变化,为你的精灵命名。

或者您可以使用SpriteSortMode.Deferred,在这种情况下,您绘制的第一件事是在背景绘制的,您绘制的第二件事是绘制在等等...

请注意,在绘制部分透明精灵时,建议的排序模式为BackToFront。

相关问题