gpt4 book ai didi

c# - 在 Monogame 中排序对象

转载 作者:行者123 更新时间:2023-11-30 19:25:55 25 4
gpt4 key购买 nike

关于在 Monogame 中开发游戏,我有一个非常简单的问题。假设我有一个不明飞行物作为可以四处移动的物体。有时,我的不明飞行物会在他站立的地方正下方的地面上(紫色圆圈)产生一个洞。

这样做之后,UFO又可以自由自在地飞来飞去了。然而,当我想飞过我刚生成的洞时,我注意到圆圈比我的 UFO 高。它不会飞过洞口,而是夹在洞口下方。

有什么方法可以让 UFO 对象始终在前景上,或者可能在 UFO 后面产生洞?

加洞的主要游戏:

Components.Add(new Hole(this, holeTexture,
hero.HolePosition));

孔对象的绘制函数:

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

英雄 (UFO) 对象中定义洞位置的函数:

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

问题图片: The UFO and the hole The UFO clipping behind the hole

最佳答案

虽然其他答案是正确的,但您可能会受益于简单地使用不同的 SpriteSortMode .正如 joppiesaus 所解释的,默认的 SpriteSortMode 是“Deferred”,这意味着 Sprite 将按照绘制的顺序绘制。

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

使用此模式,您可以指定每个元素的绘制层,这很可能会为您提供您正在寻找的功能。

SpriteBatch.Begin(SpriteSortMode.BackToFront, null);

然后在绘图时不要忘记设置图层值:

SpriteBatch.Draw(texture, position, null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0.1f);

图层值或图层深度值从 0 到 1(浮点),0 是最前层,1 是最后层。

关于c# - 在 Monogame 中排序对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26110585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com