将相机居中放置在物体上

Centering Camera onto object

我有一个摄像头 class,基本上可以跟随玩家在地图上移动,并使他始终位于屏幕中心。在更改相机的比例(放大和缩小)之前,我应用的数学效果很好。这是:

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

我一直在玩弄不同的方程式,但一旦改变比例,它们都会失败。我似乎无法解决这个问题,我真的可以利用一些洞察力来了解如何将其考虑在内。

这是相机的一些位Class:

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

第一个图像显示比例因子为 1(正常缩放)时的结果。第二张图显示比例因子为 0.9(缩小)时的结果。

我很难确定你的一些变量的含义(例如 cell.mass,我假设它是大小)并且我假设 Game.width 是实际的window 的宽度。这将有助于了解更改缩放时究竟发生了什么(例如屏幕特定角落的缩放 "center")。

现在回答,不知道实际缩放会发生什么......你试过像这样添加括号吗......

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

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

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

只是一个想法。

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

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