0
是否有計算同時保持兩個或更多點(玩家)所需的x,y,寬度,高度(視口)的公式。在相機中保留2個(或更多)玩家
附加功能:
*有點填充。
*保持寬高比(例如16:9)。
我假設有一個公式,但找不到任何東西。
謝謝
是否有計算同時保持兩個或更多點(玩家)所需的x,y,寬度,高度(視口)的公式。在相機中保留2個(或更多)玩家
附加功能:
*有點填充。
*保持寬高比(例如16:9)。
我假設有一個公式,但找不到任何東西。
謝謝
我已經解決了!
讓相機中心位置:
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)); at: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