[英]LibGDX - Camera scaling does not work
我對LibGDX有問題。 我正在嘗試創建一個應用程序,為了易於使用,我想以固定的分辨率(1920x1080)繪制所有內容。
為此,我嘗試創建FitViewport
和OrthographicCamera
,以使視口始終很好地適合屏幕尺寸,並且所有內容都會自動縮放。
在我的Screen
類中,我創建了這樣的視口和相機:
AbstractScreen() {
camera = new OrthographicCamera(Constants.VIRTUAL_WIDTH, Constants.VIRTUAL_HEIGHT);
viewport = new FitViewport(Constants.VIRTUAL_WIDTH, Constants.VIRTUAL_HEIGHT, camera);
}
(其中VIRTUAL_WIDTH
為1920, VIRTUAL_HEIGHT
為1080)
現在,當我嘗試渲染1920x1080px的圖像時,只繪制了該圖像的三分之一!
這是應該完全繪制的圖像 :
public abstract class AbstractScreen implements Screen {
private Viewport viewport;
private OrthographicCamera camera;
protected SpriteBatch spriteBatch;
AbstractScreen() {
camera = new OrthographicCamera(Constants.VIRTUAL_WIDTH, Constants.VIRTUAL_HEIGHT);
viewport = new FitViewport(Constants.VIRTUAL_WIDTH, Constants.VIRTUAL_HEIGHT, camera);
spriteBatch = new SpriteBatch();
}
@Override
public void show() {
viewport.apply();
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
spriteBatch.setProjectionMatrix(camera.combined);
}
@Override
public void resize(int width, int height) {
viewport.update(width, height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
}
}
這是實際的屏幕實現:
class LoadingScreen extends AbstractScreen {
private SpriteBatch spriteBatch;
private Texture texture;
@Override
public void show() {
super.show();
spriteBatch = new SpriteBatch();
texture = new Texture("textures/test.png");
}
@Override
public void render(float delta) {
super.render(delta);
spriteBatch.begin();
spriteBatch.draw(texture, 0, 0);
spriteBatch.end();
}
}
謝謝!
你LoadingScreen正在創建一個名為自己的SpriteBatch spriteBatch
, 隱藏 spriteBatch
在AbstractScreen超。
因此,您的LoadingScreen.render()
調用super.render()
,它在AbstractScreen.spriteBatch
設置了適當的投影矩陣,但是隨后您正在使用LoadingScreen.spriteBatch
進行繪制。
因此,請刪除LoadingScreen中的spriteBatch
字段,不要在spriteBatch
實例化該字段。 使AbstractScreen中的spriteBatch
受保護,以便您可以從子類訪問它。
順便說一下,必須將SpriteBatches放在dispose()
否則您將泄漏內存。 更好的是,不要在屏幕內實例化SpriteBatch。 在您的游戲中實例化一個SpriteBatch並將其傳遞給Screen的構造函數,以便所有內容都可以共享同一實例,而不是在每次切換屏幕時浪費時間來實例化和實例化新實例。 SpriteBatch是重物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.