Monogame C# - 如何在 tilemap 层 0 和 1 之间绘制我的精灵?

Monogame C# - How do I draw my sprites between tilemap layer 0 and 1?

我有一张地图:

this.TileMap = Content.Load<TiledMap>("Maps/MyTileMap");
_tiledMapRenderer = new TiledMapRenderer(GraphicsDevice, this.TileMap);

我想在第 0 层和第 1 层之间渲染我的普通精灵。有点像这样:

DrawLayer(0, 0f);
foreach(var sprite in this.Sprites)
{
    sprite.Draw(spriteBatch, gameTime);
}
DrawLayer(1, 1f);

sprite.Draw 是:

var destRectangle = new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height);
spriteBatch.Draw(Texture, destRectangle, null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0.2f);

而 DrawLayer 会:

var layer = this.TileMap.Layers[idx];
_tiledMapRenderer.Draw(layer, this.Camera.GetViewMatrix(), depth: depth);

但我的常规精灵仍然在所有内容之上。

地形在第 0 层,树在第 1 层(很明显)。

我认为提供 layerDepth 应该可以确保正确的绘制顺序,但显然不能。

Any pointers on how to fix this?

或者,

how can I add my sprites to a layer? 

我听说这是一个选项,但我一直没弄明白。

那是行不通的,因为您不知道相对于您的人物精灵该为那棵树分配哪些层。具体来说,如果人在树的南面,你希望它画在树的顶部,而当它在树的北面时,你希望它在树下。

您将不得不对精灵进行排序,以便它们从屏幕底部向上绘制。

正如预期/希望的那样,它必须是简单的东西,因为我不敢相信每个人都会使用 Tiled,如果它实际上没有产生可行的结果。

所以有效的方法是将其添加到 .Begin():

_spriteBatch.Begin(sortMode: SpriteSortMode.ImmediatetransformMatrix: this.Camera.GetViewMatrix(), );

这让我明白了: