在XNA游戏的不同级别中使用多个SpriteBatch,使组件保持可见

在XNA游戏的不同级别中使用多个SpriteBatch,使组件保持可见,xna,sprite,composite,drawablegamecomponent,Xna,Sprite,Composite,Drawablegamecomponent,我目前正在尝试将屏幕逻辑添加到我基于XNA的太空入侵者游戏中 我的问题是: 每个屏幕通过一个CompositedRavableComponent实例(用作GameComponentsManager)管理自己的游戏组件(太空船、EnemyMatrix等) 每个游戏组件本身都包含其他游戏组件(例如,飞船上有一颗子弹),因此包含自己的GameComponentsManager实例 每个GameComponentsManager包含其所有组件的一个SpriteBatch,即PlayScreen为其飞船使

我目前正在尝试将屏幕逻辑添加到我基于XNA的太空入侵者游戏中

我的问题是:

每个屏幕通过一个CompositedRavableComponent实例(用作GameComponentsManager)管理自己的游戏组件(太空船、EnemyMatrix等)

每个游戏组件本身都包含其他游戏组件(例如,飞船上有一颗子弹),因此包含自己的GameComponentsManager实例

每个GameComponentsManager包含其所有组件的一个SpriteBatch,即PlayScreen为其飞船使用一个唯一的SpriteBatch,而每个飞船为其子弹使用一个唯一的SpriteBatch

因此,宇宙飞船的组件被简单地画在屏幕组件(在我的例子中是背景)的后面,并对用户保持不可见


如何解决此问题?

不要使用多个SpriteBatch


您仍然可以将所有SpriteBatch变量保留在所有类中,但不是每次都声明一个新变量,而是传递一个变量。在这一点上,您需要做的所有更改是确保您只开始和结束一次,现在您可以更好地控制绘图顺序。您可以使用图层深度,也可以按照正确的顺序手动绘制。

答案太简单了,但您是否尝试过先绘制屏幕精灵画面,然后再绘制其他画面?这有一个问题,那就是关卡上不能有云彩或类似的东西出现在船上,但是如果你想继续使用多个批次……嘿,斯科特,我理解你的单批次态度,但是我需要使用的代码(例如,在CompositeDrawableComponent类中)而是迫使我对每个组件使用多个批次。我一直在尝试寻找一个可以发送到Begin(params)的参数组合,它可能会解决我的问题,但直到现在,都没有成功@Scott我不明白你是怎么被迫使用多重密码的?你能发布一些代码来演示这一点吗?