【发布时间】:2013-11-25 23:22:20
【问题描述】:
我正在为我的 XNA 项目编写一个摄像头模块,但最近遇到了一个问题。
我允许相机旋转到我的模块,但我遇到了一个极好的错误 - 每次我在同一位置绘制多个精灵时,spriteBatch 一次在前面绘制一个,第二次在前面绘制第二个,有时甚至更有趣显示了两个精灵,具有不同的 alpha。
我做了一些实验:
- 当我将
SpriteBatch模式设置为Deffered时,一切正常 - 但我想访问 z-index。 - 当我绘制一个完整的 500x500 瓷砖数组(所有精灵都已加载)时,一切正常,但是当我从数组中得到大约 50x50 的正方形(包含整个所需的屏幕内容)时,它就会出现问题。
- 最终,不同的状态总是以相同的角度发生。
我必须补充一点,我自己做翻译 - 为了获得双精度。翻译方法如下:
public void DrawSprite(Sprite toDraw)
{
// TODO: Think about converting constructor
Vector2D drawingPostion;
Vector2 drawingPos;
drawingPostion = toDraw.Position - Position;
drawingPos.X = (float) drawingPostion.X * GraphicsManager.Instance.UnitToPixels;
drawingPos.Y = (float) drawingPostion.Y * GraphicsManager.Instance.UnitToPixels;
spriteBatch.Draw(toDraw.Texture, drawingPos, toDraw.Source, toDraw.Color,
toDraw.Rotation, toDraw.Origin, toDraw.Scale, toDraw.Effects, toDraw.LayerDepth);
}
我对这个问题的想法:
- 以某种方式修复错误(如果可能的话)
- 强制 XNA 先按 z-index 排序,然后按绘图顺序。
- 在可能发生重叠的地方应用一些 z-index(不喜欢这样)
- 放弃 z-index(也不想要)
【问题讨论】:
-
查看
spriteBatch.Begin(SpriteSortMode.BackToFront);和DrawableGameComponent上的DrawOrder属性 -
我实际上并没有使用
DrawableGameComponents,但无论如何我都可以使用LayerDepth。回到前面是我现在使用的,似乎当有两个相同LayerDepth的精灵时,系统会因某些角度速率而损坏。它不关心我调用SpriteBatch.Draw()方法的顺序。我担心的是,当我绘制所有加载的精灵时,它似乎工作正常:/