Я решил!
получить позицию камеры центра:
private Vector2 getCentroid() {
float centroidX = 0, centroidY = 0;
for (Player p : players) {
centroidX += p.getCenter().x;
centroidY += p.getCenter().y;
}
return new Vector2(centroidX/players.size(), centroidY/players.size());
}
Затем я создаю прямоугольник, который идет с позиций нижней левой крайней точки до верхней правой крайней точки:
private Rectangle getPlayersBounds() {
float minX = Float.POSITIVE_INFINITY;
float maxX = Float.NEGATIVE_INFINITY;
float minY = Float.POSITIVE_INFINITY;
float maxY = Float.NEGATIVE_INFINITY;
for (Player p : players) {
if (p.getCenter().x < minX) {
minX = p.getCenter().x;
}
if (p.getCenter().x > maxX) {
maxX = p.getCenter().x;
}
if (p.getCenter().y < minY) {
minY = p.getCenter().y;
}
if (p.getCenter().y > maxY) {
maxY = p.getCenter().y;
}
}
return new Rectangle(minX, minY, maxX - minX, maxY - minY);
}
Затем я устанавливаю камеру в положение центроида и использую прямоугольник, чтобы определить, насколько далеко игроки выходят из экрана и уменьшают его.
private void updateCameraPosition() {
camera.position.set(getCentroid(), 0);
Rectangle playersBounds = getPlayersBounds();
float xxx = playersBounds.getWidth()/Gdx.graphics.getWidth();
float yyy = playersBounds.getHeight()/Gdx.graphics.getHeight();
float biggest = Math.max(xxx, yyy);
camera.zoom = Math.max(1, biggest);
}
я нашел: FOV = 2 * агс ((0,5 * distanceBetweenPlayers)/(distanceFromMiddlePoint * AspectRatio)); по адресу: http://stackoverflow.com/questions/22015697/how-to-keep-2-objects-in-view-at-all-time-by-scaling-the-field-of-view-or- zy Это выглядит близко. – WookooUK
Один экран или сетевая игра? – Madmenyo
Да, два игрока на одном экране – WookooUK