【发布时间】:2017-04-04 18:05:45
【问题描述】:
我是经验丰富的 libgdx 开发人员,但我在一个问题上苦苦挣扎了一段时间,所以我决定在这里提问。
我使用 FillViewport、TiledMap、Scene2d 和 OrtographicCamera。我希望相机跟随我的播放器实例,但定义了边界(等于地图大小)。这意味着相机永远不会离开地图之外,所以当玩家到达地图的尽头时,相机会停止跟随并且他会走到屏幕本身的边缘。也许听起来很复杂,但它很简单,我相信你知道我的意思,它在每个游戏中都会用到。
我计算了 4 个值:
minCameraX = camera.viewportWidth / 2;
minCameraY = camera.viewportHeight / 2;
maxCameraX = mapSize.x camera.viewportWidth / 2;
maxCameraY = mapSize.y - camera.viewportHeight / 2;
我删除了单位转换、camera.zoom 等不必要的东西。然后我像这样设置相机位置:
camera.position.set(Math.min(maxCameraX, Math.max(posX, minCameraX)), Math.min(maxCameraY, Math.max(posY, minCameraY)), 0);
(posX, posY is player position) 这基本上是将相机设置为玩家位置,但如果它太高或太低,它会将其设置为之前在右轴上定义的最大值或最小值。 (我也尝试过 MathUtils.clamp(),它的工作原理是一样的。
到目前为止,一切都很完美。当纵横比改变时会出现问题。默认情况下,我使用 1280x768,但我的手机有 1280x720。由于 FillViewport 的工作方式,屏幕的底部和顶部边缘被切断。因为我的地图的那部分被切断了。
我尝试修改最大值和最小值,计算比率差异并将它们添加到计算中,更改相机尺寸,不同的视口和其他一些东西,但没有成功。
你们能帮忙吗? 谢谢
【问题讨论】:
-
到底是什么问题?您的相机边界机制不再起作用,还是屏幕部分被切断的问题?
-
第二个。顶部和底部边缘被切割,因此我看不到例如地图结束框。当然我知道这就是 FillViewport 的工作方式,但应该可以修改相机边界来修复它
-
我不确定它在这种情况下是否有效,但您可以尝试将
getTopGutterHeight()和getBottomGutterHeight()添加到您的 minCameraY 和 maxCameraY (或者可能反过来并减去而不是添加? ) -
晚上一定要试试。我会告诉你的
-
@noone - 这不是仅适用于 FitViewport 吗?
标签: camera libgdx viewport bounds tiled