Плиточная карта libgdx позволяет получить положение игрока на всей карте, чтобы сделать миникарту
На самом деле я рисую часть моей мозаичной карты, используя масштабирование камеры (с OrthogonalTiledMapRenderer
на моей основной камере). Камера центрирована на позиции игрока (который всегда находится в центре экрана) в мире box2d.
// Set camera postion center on player (box2d body) on every update
camera.position.set(player.getBody().getWorldCenter(), 0);
Я хотел бы создать миникарту со второй камерой. Простой заполненный прямоугольник с точкой, обозначающей положение игрока на карте. Итак, я создал новую камеру:
minimapCamera = new OrthographicCamera(1280, 720); // as my main camera
minimapCamera.zoom = 6; // larger zoom
minimapCamera.position.set(-1280 * 2, 720 * 3, 0); // align bottom right corner
И я стараюсь рисовать фигуры:
ShapeRenderer sr = new ShapeRenderer();
sr.setAutoShapeType(true);
sr.setProjectionMatrix(minimapCamera.combined);
sr.begin(ShapeType.Filled);
sr.setColor(0.5f, 0.5f, 0.5f, 0.3f);
// minimap rectangle background
sr.rect(0, 0, minimapCamera.viewportWidth, minimapCamera.viewportHeight);
sr.setColor(1f, 0f, 0f, 0.4f);
// player circle point
sr.circle(playerPos.x, playerPos.y, 20);
sr.end();
Но как я могу рассчитать положение игрока playerPos
во всей плиточной карте? А как нарисовать только часть увеличенной карты? (Я не хочу рисовать всю карту, но более крупный участок, чем моя основная камера).
РЕДАКТИРОВАТЬ: Если я хочу повторно использовать свою плиточную карту в моей миникарте, как я могу нарисовать только видимый игроком участок миникарты (на данный момент вся карта отображается, даже если я указал небольшой размер камеры)?
1 ответ
Предполагая, что ваша карта плиток использует строки и столбцы, а каждая ячейка имеет заданную ширину и высоту, вы можете получить позицию игрока в массиве карты плиток следующим образом (надеюсь, вы не против JavaScript):
var player={x:200,y:200};/* Or whatever position. */
var tile_width=tile_height=32;/* Or whatever dimension you're using. */
player.tile_x=Math.floor(player.x/tile_width);
player.tile_y=Math.floor(player.y/tile_height);
Это дает вам точную x и y плитку, которую игрок занимает в мире.