Я довольно опытный разработчик 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 — положение игрока), что в основном устанавливает камеру в положение игрока, но если оно слишком высокое или слишком низкое, оно устанавливает его на максимальное или минимальное значение, определенное ранее по правой оси. (Я также пробовал MathUtils.clamp(), и он работает так же.
Все идеально до сих пор. Проблема возникает при изменении соотношения сторон. По умолчанию я использую 1280x768, но на моем телефоне 1280x720. Из-за этого нижний и верхний края экрана обрезаются из-за того, как работает FillViewport. Из-за этого часть моей карты обрезана.
Я пытался изменить максимумы и минимумы, вычислить разницу в соотношении и добавить их в расчеты, изменить размер камеры, разные окна просмотра и некоторые другие вещи, но безуспешно.
Вы можете помочь? Спасибо
getTopGutterHeight()
иgetBottomGutterHeight()
к своим minCameraY и maxCameraY (или, может быть, наоборот и вычесть вместо добавления?) - person noone   schedule 21.11.2016getTopGutterHeight()
возвращаетGdx.graphics.getHeight() - (screenY + screenHeight)
, который представляет собой разницу между высотой области просмотра и фактической высотой устройства = отрезанная часть. - person noone   schedule 21.11.2016