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(), );
这让我明白了:
我有一张地图:
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(), );
这让我明白了: