2012-07-26 34 views
4

我剛開始玩LibGDX,並且已經面臨相機問題。LibGDX - Camera.update()調用什麼都不做

我看到網上一些TUTOS其告知,如果我使用LibGDX你已經重新計算所有實體的(我指的是屏幕上everyinthg)以參數的速度等位置深知,在2D遊戲...

對我來說,這意味着相機不會移動,但它顯示的世界。 我想做相反的事,移動相機而不是世界,因爲它對我來說更有意義,而且看起來更容易,因爲我只需移動相機,而不是所有實體。所以我不希望世界移動,我的相機顯示更改,但我的相機移動並顯示更改。因此,即使某些實體不移動(它們的座標x & y不會改變),它會看起來像相機移動。

所以我有一個Camera類繼承OrthographicalCamera,和Entity類。 我也有2個接口PositionListener & PositionListenable =>模式觀察者。

所以我試圖做的是:
- 我的相機「聽」到只有我的實體之一(例如玩家)
- 當我的實體移動時,它會更新相機的座標(X,Y )並且我的相機將其位置更改爲x和y以跟隨我的實體。

這裏是Camera.java代碼:

public class Camera extends OrthographicCamera implements PositionListener { 

    public Camera(float width, float height) { 
     super(width, height); 
    } 

    @Override 
    public void entityMoved(float newX, float newY) { 
     translate(newX - position.x, newY - position.y); 
     update(); 
     Gdx.app.log("entityMoved()", "newX=" + newX + " - newY=" + newY); 
     Gdx.app.log("entityMoved()", "position.x=" + position.x + " - position.y=" + position.y); 
} 

}

當我讀日誌,我看到position.xposition.y改變我預料之中的事跟着我的實體,但在視覺上相機不動?一切看起來都像我的相機不翻譯一樣!

我的相機根本不動,只有我的實體!
我錯過了什麼?我讀了一些關於「viewPort」的內容,但是真的沒有得到,因爲我是LibGDX的初學者。

回答

3

好的,在這裏,我怎麼得到它的工作。
這裏是entityMoved()方法:

@Override 
public void entityMoved(float newX, float newY) { 
    translate(newX - position.x, newY - position.y); 
    Gdx.app.log("entityMoved()", "newX=" + newX + " - newY=" + newY); 
    Gdx.app.log("entityMoved()", "position.x=" + position.x + " - position.y=" + position.y); 

,並在主循環中,render()方法ApplicationListener

sprite.begin(); 
world.draw(sprite); 
sprite.end(); 

camera.update(); 
sprite.setProjectionMatrix(camera.combined); 

Draw方法()也讓我的實體的舉動,並通知其觀測器是相機。 然後我更新相機(而不是像我以前那樣從它自己的方法)並更新投影矩陣。

有點遲緩,但作品就像我想要的那樣!

+0

+1 thanks for this! – Nolesh 2012-10-26 00:53:54