将相机对准到物体上

时间:2016-02-15 20:52:36

标签: java camera 2d

我有一个Camera类,它基本上跟随地图上的玩家并让他在屏幕上居中。数学即时应用效果很好,直到相机的比例(放大和输出)发生变化。这是:

x = -cell.x - cell.mass/2 + Game.width/2 / sX; 
// Where x is the Camera's X, Cell is the Player and sX is the scale factor

我一直在玩不同的方程式但是一旦比例改变它们都会失败。我似乎无法理解这一点,我真的可以使用一些有关如何将其考虑在内的见解。

以下是相机类的一些内容:

public void set(Graphics bbg){
   Graphics2D g2 = (Graphics2D)bbg;
   g2.translate(x, y);
   g2.scale(sX, sY);
 }

 public void unset(Graphics bbg){
    Graphics2D g2 = (Graphics2D)bbg;
    g2.translate(-x, -y);
 }

  public void scale(double sx, double sy){
   sX = sx;
   sY = sy;
  }

  public void Update(Cell cell){
    scale(0.9,0.9);
    x = -cell.x - cell.mass/2 + Game.width/2 / sX;
    y = -cell.y - cell.mass/2 + Game.height/2 / sY;
  }

  public double toWorldX(int x){
   return x - this.x / sX;
  }

  public double toWorldY(int y){
    return y - this.y / sY;
  }

Scale is set to 1 Scale is set to 0.9 当比例因子为1(正常缩放)时,第一个图像显示结果。当比例因子为0.9(缩小)时,第二个图像显示结果。

2 个答案:

答案 0 :(得分:1)

我在确定你的一些变量意味着什么方面有点困难(例如cell.mass,我假设它是大小),我认为Game.width是窗口的实际宽度。更改缩放时会发生什么事情会有所帮助(就像屏幕特定角落的缩放“中心”一样)。

现在回答一下,不知道实际变焦会发生什么......你试过加上像这样的括号......

x = ((cell.x + cell.mass/2) - Game.width/2) / sX;

或(因为你使用' - '很多,我不确定你的坐标是如何工作的)

x = ((-cell.x - cell.mass/2) + Game.width/2) / sX;

只是一个想法。

答案 1 :(得分:0)

在考虑比例因子的同时使相机跟随玩家的工作方程是:

x =((cell.x + cell.mass * 0.5) - Game.width/sX * 0.5);