2016-02-15 57 views
0

我有一個相機類,基本上跟隨地圖上的玩家,並讓他居中在屏幕上。數學即時應用的工作效果很好,直到相機的縮放比例(放大和縮小)被改變。它是:將相機對準對象

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 

我一直在玩不同的方程,但他們都失敗了,一旦規模被改變。我似乎無法環繞此我的頭,我真的可以使用如何在因素它的一些見解

以下是Camera類的一些位:

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 0.9 的第一張圖像顯示比例因子爲1(普通縮放)時的結果。第二張圖像顯示比例因子爲0.9(縮小)時的結果。

回答

0

爲了使相機跟隨玩家,同時分解一個比例係數的工作方程爲:

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

(我想評論這一點,但我沒有足夠的聲譽......我是如此裸露)

我有確定什麼你的一些變量的意思(如細胞有點困難。質量,我假設它的大小),我假設Game.width是窗口的實際寬度。這將有助於瞭解變焦時發生了什麼(例如屏幕特定角落處的縮放「中心」)。

現在一個答案,不知道會發生什麼實際變焦......你試圖加入這樣的括號...

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

或(因爲你用「 - 」了很多,我不確定你的座標是如何工作的)

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

只是一個想法。

+0

我提供的會發生什麼圖片 – BruceTheGoose

+0

你的方法沒有解決問題 – BruceTheGoose

+0

你能提供玩家的座標和相機在變焦1和其他一些變焦? –