2017-02-01 26 views
0

是否有計算同時保持兩個或更多點(玩家)所需的x,y,寬度,高度(視口)的公式。在相機中保留2個(或更多)玩家

附加功能:
*有點填充。
*保持寬高比(例如16:9)。

我假設有一個公式,但找不到任何東西。

謝謝

+1

我發現: 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

+0

一個屏幕或網絡遊戲? – Madmenyo

+0

是的,在同一屏幕上的兩名玩家 – WookooUK

回答

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

    }