2016-04-07 17 views
0

我所做的遊戲目前很混亂,但時間很長,所以我沒有勇氣改變它。所以我PlayState是沒有攝像頭製成,對OD%寬度的計算是由...視口主張更換屏幕

但現在我做了我的MainMenu用相機和視口的,因爲好,這是快得多......

現在,如果我直接啓動PlayState,則它正常工作。但是如果我從MainMenu啓動PlayState,那麼視口似乎會出現,而我的遊戲完全是奇怪的。 0,0似乎是在中間,沒有任何邏輯工程...

那麼,我該如何重置視口?或者如果我是正確的,setProjectionMatrix(camera.combined)似乎仍然存在。如何刪除?

+0

是否使用Scene2D或者是3D?您是否在更換屏幕時嘗試過創建新相機? – Nanoc

回答

0

在你PlayState的render方法的開始,呼籲

Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

視口重新設置爲全屏大小。您還需要將批次的投影矩陣設置爲不使用MainMenu時使用的任何值。如果您的PlayState不使用攝像頭,也許矩陣設置爲屏幕大小,或者它可能是一個單位矩陣。所以,你可以使用其中的一個:

spriteBatch.getProjectionMatrix().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

spriteBatch.getProjectionMatrix().idt(); 
+0

不錯,它的工作,真棒,謝謝...雖然我可以問,爲什麼它不工作,如果我給構造函數中的這2個命令?有沒有必要多給他們打電話? –

+0

整個應用程序只有一個OpenGL視口。視口對象修改它,但不會自動將其更改回默認值。因此,您的MainMenu的視口正在修改OpenGL視口,並且您的PlayState正在等待默認視口,因此每次在兩者之間切換時都需要將其更改回來。如果你的兩個類共享一個SpriteBatch(他們應該節省內存和加載時間),那麼每個類都必須設置SpriteBath使用它期望的投影矩陣。 – Tenfour04

+0

另請注意,不使用相機或至少手動計算自適應投影矩陣是一個糟糕的主意,因爲屏幕尺寸在設備之間變化很大。 – Tenfour04