标题对象位置与MonoGame位置不匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标题对象位置与MonoGame位置不匹配相关的知识,希望对你有一定的参考价值。

将带有对象层的Tiled映射导入到MonoGame项目中时,我遇到了问题。一切工作都很好。我可以将Tiled地图导入项目并使用MonoGame.Extended渲染地图。

当我尝试从平铺地图的对象层使用对象时,我的问题开始了。我可以访问该对象,也可以访问其属性(位置等)。实际上,当访问对象的属性时,它们将完全按照原样输出。以下是需要澄清的图片:

This is the image of the object within the Tiled map editor

下面是我导入地图,收集对象信息并将该信息(在这种情况下为位置)分配给另一个对象(玩家)的代码

gameMaps.Add(MapBuilder.LoadTiledMap("TestMap"));

gameMapRenderer = new TiledMapRenderer(graphicsDevice);

var viewportAdapter = new BoxingViewportAdapter(GameInstance.Instance.Window, graphicsDevice, 1440 / 4, 810 / 4);
mainCamera = new Camera2D(viewportAdapter);

var player = new Player();
var playerStartPos = new Vector2();

foreach(var obj in gameMaps[0].ObjectLayers[0].Objects)
{
  if (obj.Name.Equals("PlayerStart"))
  {
    playerStartPos = obj.Position;
    break;
  }
}

player.position = playerStartPos;

entities.Add(player);

mainCamera.LookAt(player.position);

但是下面是演示问题的图像:

Issue as an image

精灵/角色是被分配位置的玩家对象,如果不清楚的话。

解释:我能够获得对象的位置并将其分配给我的“ Player”对象,然后我的播放器将根据平铺地图编辑器中该对象的位置处于正确的位置。但是,尽管我从未对整个地图的位置进行任何调整,但Tiled地图本身实际上是在不正确的位置渲染的。

一些其他详细信息可能会有所帮助:

在“平铺地图编辑器中,位置x0,y0是地图的最大顶部图块。但是,在MonoGame中,如果我走相同的位置-Tiled地图实际上在下面渲染/放置了一些尺寸。这意味着地图的位置与应有的位置不正确。

下面是显示MonoGame中该位置以及它与Tiled中该位置没有正确关联的图像。

MonoGame screenshot

答案

[与Monogame的创建者交谈了一下​​。扩展,我们缩小了范围。实际上这是两件事:

  1. 在Tiled地图编辑器中,等轴测图的网格系统不同于Monogame用于渲染所有内容的网格系统。 Tiled用于等轴测图的网格系统是法线网格,但已旋转以匹配等轴测视图,而Monogames只是法线网格。这会导致将Tiled中的对象的位置(x,y)导入到Monogame中,其位置值与其在Monogame中实际应存在的位置不匹配-这解释了上图中的位置错误。 Monogame.Extended的创建者注意到了该错误,但表示无法确定修复程序,因为它需要将等距Tiled位置转换为Monogame位置的公式。

  2. 因为我的子画面在顶部有多余的填充,这导致整个贴图渲染的x像素比适当的0位置低了许多像素。它与在Monogame中通过精灵尺寸而非地图生成的地图有关。老实说,这不是一个大问题,因为可以在TiledMapRenderer的自定义实现中做出解决方法。

我可以发布到Monogame的链接。稍后将进行扩展讨论。

以上是关于标题对象位置与MonoGame位置不匹配的主要内容,如果未能解决你的问题,请参考以下文章

在monogame中克隆和绘制对象

C# MonoGame - 玩家向后移动

在画布上用鼠标绘图。笔划与当前鼠标位置不匹配

ValueError:FixedLocator 位置的数量 (5),通常来自对 set_ticks 的调用,与刻度标签的数量 (12) 不匹配

触摸和画布元素位置不匹配

Android 使用两个不同的代码片段获取当前位置 NULL