我的程序有问题。我不明白屏幕是如何占据屏幕上的其他内容的。详细信息,我的代码如下所示:
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, cam.get_transformation(GestionEcran.GraphicsDevice));
//Draw the background
decor.Draw(spriteBatch, gameTime, 255);
//Draw the players
Player2.Draw(spriteBatch, gameTime);
Player1.Draw(spriteBatch, gameTime);
//Draw the foreground
decor.DrawPremierPlan(spriteBatch, gameTime, 70);
if (aPlayerisWinning== true)
{
//THIS LINE "HITBOX" IS APPEARING BEFORE PLAYERPORTRAIT!!!!!!!!!!!!!!
spriteBatch.Draw(hitBox, new Rectangle(0, 0, 500,500), new Color(255, 255, 255, 255));
spriteBatch.Draw(PlayerPortrait, new Rectangle(0,0,500,500), new Color(255, 255, 255, 255));
}
spriteBatch.End();
// USED FOR ADDITIVE BLENDING
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive, null, null, null, null, cam.get_transformation(GestionEcran.GraphicsDevice));
{
Player1.DrawEffects(spriteBatch,gameTime);
Player2.DrawEffects(spriteBatch,gameTime);
}
spriteBatch.End();
正如您所看到的,hitbox(白色屏幕)必须出现在PlayerPortrait后面,但它不起作用。白色屏幕涵盖了所有其他图纸。
你知道吗? THX。编辑:SpriteSortMode没有任何变化。 BacktoFront,FrontToBack和Texture混乱了我的重叠结构。 Immediate和Deffered运行良好,但白屏有同样的问题。 正如在第一个答案的链接中所述,deffered在一个批次中绘制所有精灵,以相同的顺序接收对Draw的调用。那么为什么我的倒数第二次呼叫出现在我的最后一次通话之前呢?
答案 0 :(得分:2)
查看其他SpriteSortMode
枚举器。
您可以使用BackToFront
和FrontToBack
更改绘制顺序,这些只是Deferred
模式的变体。 Texture
是Deferred
的另一个版本,它会对纹理进行排序,从而获得性能。
答案 1 :(得分:1)
我通过玩每次抽奖的alpha来找到解决方案。它实现我想要的效果并绕过问题
解决方案2: 当使用Alpha通道播放透明度时,您还需要操作RGB以使屏幕透明。我不知道。