保持2个(或更多)玩家在相机中

时间:2017-02-01 17:07:57

标签: java libgdx

是否存在计算一次保持两个或多个点(玩家)所需的x,y,宽度,高度(视口)的公式。

奖金功能:
*一点点填充。
*保持纵横比(例如16:9)。

我假设有一个公式,但找不到任何东西。

谢谢

1 个答案:

答案 0 :(得分:0)

我已经解决了!

获取相机中心位置:

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);

    }