将相机居中放置在物体上
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);
我有一个摄像头 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;
}
我很难确定你的一些变量的含义(例如 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);