我有一个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;
}
答案 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);