2017-02-01 7 views
0

Есть ли формула для вычисления x, y, width, height (viewport), необходимая для одновременного отображения двух или более очков (игроков).Держите 2 (или больше) игроков в камере

бонусные функции:
* Немного дополнений.
* Сохранение соотношения сторон (например, 16: 9).

Я предполагаю, что для этого есть формула, но ничего не может найти.

Спасибо

+1

я нашел: 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

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

    } 

 Смежные вопросы

  • Нет связанных вопросов^_^