在Monogame中订购对象

M. *_*ckx 1 c# xna monogame

关于在Monogame中开发游戏,我有一个简单的问题。假设我有一个UFO作为可以移动的对象。我的UFO有时会在他站立的位置正下方的地面(紫色圆圈)中产生一个洞。

完成此操作后,UFO可以再次自由飞行。但是,当我想越过刚刚生成的孔时,我发现圆圈比我的UFO高。它不会飞过孔,而是会夹在孔下。

有什么方法可以使UFO对象始终位于前景上或可能在UFO后面产生孔?

增加漏洞的主要游戏:

Components.Add(new Hole(this, holeTexture,
                   hero.HolePosition));
Run Code Online (Sandbox Code Playgroud)

孔对象的绘制功能:

public override void Draw(GameTime gameTime)
    {
        SpriteBatch sBatch =
            (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch));
        sBatch.Draw(texture, position, Color.White);
        base.Draw(gameTime);
    }
Run Code Online (Sandbox Code Playgroud)

英雄(UFO)对象中的函数,用于定义孔的位置:

public Vector2 HolePosition //nodig om gaten te graven (startpos.)
        {
            get { return new Vector2(position.X + (WIDTH / 2), position.Y + HEIGHT); }
        }
Run Code Online (Sandbox Code Playgroud)

问题图片: 不明飞行物和洞 不明飞行物夹在孔后面

jga*_*ant 6

尽管其他答案是正确的,但仅使用其他SpriteSortMode可能会受益。正如joppiesaus解释的那样,默认的SpriteSortMode是“ Deferred”,这意味着将按绘制顺序绘制精灵。

在您的情况下,您最有可能要使用的是SpriteSortMode.BackToFront。

使用这种模式,您可以指定每个元素的绘制层,这很可能为您提供所需的功能。

SpriteBatch.Begin(SpriteSortMode.BackToFront, null);
Run Code Online (Sandbox Code Playgroud)

然后在绘制时别忘了设置图层值:

SpriteBatch.Draw(texture, position, null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0.1f);
Run Code Online (Sandbox Code Playgroud)

图层值或图层深度值从0到1(浮动),0是最前面的图层,而1是最下面的图层。

  • 这应该是公认的答案。它使用框架的内部架构。 (2认同)