2017-02-01 12 views
0

2人以上のポイント(プレーヤー)を一度に見るために必要なx、y、幅、高さ(ビューポート)を計算する式はありますか?カメラに2人以上のプレーヤーを残す

ボーナス機能:
*パディングの少し。
*縦横比を維持する(例:16:9)。

これは数式があると仮定していますが、何も見つかりません。

ありがとうございました

+1

I実測値: FOV = 2 *アークタンジェント((0.5 * distanceBetweenPlayers)/(distanceFromMiddlePoint *アスペクト比))。 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

1画面またはネットワーキングゲームですか? – Madmenyo

+0

そうですね、同じ画面の2人のプレーヤー – WookooUK

答えて

0

私はそれを解決しました!

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

    } 
関連する問題