Monogame C# - 如何在 tilemap 层 0 和 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,Vector2.Zero,SpriteEffects.None,0.2f);

而 DrawLayer 可以:

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

但我的常规精灵仍然是最重要的。

enter image description here

地形在第 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(),);

这让我明白:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...