【问题标题】:Define fixed coordinate starting point on an "infinite" map在“无限”地图上定义固定坐标起点
【发布时间】:2025-11-20 13:25:11
【问题描述】:

正在开发 2d 自上而下的平铺地图游戏 - 我一直在研究生成地图坐标 (x/y),玩家可以使用它来导航(“无限”,perlin/其他生成的地形)地图,以及解决噪音生成问题。

我已经看到了解决方案,并被告知将世界坐标转换为屏幕坐标,反之亦然 - 但我无法弄清楚如何正确定义固定地图坐标,因为在屏幕上渲染某些东西是通过相对坐标完成的到框架/窗格...所以 0,0 始终是窗口的左上角,无论地图在哪里。

我可以轻松计算地图的坐标(在你的角色位置和地图中心之间有a 平铺列和b 平铺行)但是我不明白如何定义固定点-地图起始位置?一旦我启用了保存功能,玩家可能会在不同的位置开始游戏,因此它不能以此为基础。

【问题讨论】:

  • 我不明白起始位置的问题出在哪里。
  • (假设玩家始终位于屏幕中心)您可以在玩家周围的方框中获取世界坐标;玩家在世界的 x,y 处,将 x-10 到 x+10 映射到屏幕,将 y-10 和 y+10 映射到屏幕。 (x-10, y-10) 是你的 0,0 屏幕坐标?
  • 我还没有保存功能,但是当我这样做时,玩家将能够在他们退出的最后一个位置开始 - 如果我以此为基础对于地图坐标,每次玩家在不同区域保存/退出后再次开始游戏时,地图坐标都会发生变化。

标签: java


【解决方案1】:

当做这样的事情时,所有坐标都应该在“世界坐标”中。所以你的玩家位置是它在无限地图上的位置,而不是他在屏幕上的位置。

要渲染所有内容,您需要一个获取世界坐标并将其转换为屏幕坐标(反之亦然)的方法。

要开始渲染,请使用屏幕坐标 0,0 -> 转换为世界坐标以获取要在左上角渲染的图块。与点击一样:获取鼠标坐标,转换,然后在世界地图上查看那里有什么。

移动玩家时,更新其世界坐标等

【讨论】:

  • 这是有道理的,但我的问题是如果我没有参考点,我如何确定玩家所在的世界坐标?渲染图标使用屏幕坐标,定位玩家需要世界坐标,世界坐标需要起点为 0,0。如何设置位置或知道 0,0 在哪里?
  • 世界的起源就是你放它的地方。由于您使用生成的地形,因此您的算法将需要世界坐标作为输入。通常,算法会有特定的需求,并且某个坐标会使一切变得更容易。使用那个。
最近更新 更多