[英]Scaling to sceen using libgdx on Android
我正在使用libgdx為Android創建一個簡單的游戲。 我遇到的問題是,不同設備的屏幕尺寸不同,但還沒有找到有關如何處理此問題的具體文檔。
我認為我應該使用OrthographicCamera
? 到目前為止,我有一個代碼示例:
private OrthographicCamera camera;
public void create() {
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("data/cube.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
camera = new OrthographicCamera(1280, 720);
sprite = new Sprite(texture);
sprite.setOrigin(0, 0);
sprite.setPosition(1280/2, 600);
}
public void render() {
Gdx.gl.glClearColor(0.204f, 0.255f, 0.255f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
sprite.draw(batch);
batch.end();
}
我走對了嗎? 我沒有其他可以測試的設備,並且我的模擬器導致了我的問題。
如果您尚未這樣做,則應將LibGDX版本升級到最新版本1.0.0。 在此版本中,引入了所謂的Viewport
。
您可以在此處找到一些屏幕截圖和代碼段以及所有需要了解的內容。
基本上,您將必須決定某種策略(您的問題聽起來像您在ScreenViewport
或StretchViewport
都很有趣),然后再由它來管理您的相機。
我在libGDX項目中使用的方法是override
resize
方法,並使用稱為setToOrtho(boolean yDown)
的內置方法按如下所示將OrthographicCamera
設置為屏幕尺寸,該方法將相機設置為以當前尺寸為中心,如果您需要希望y軸指向下方還是不指向下方:
@Override
public void resize(int width, int height){
camera.setToOrtho(false);
}
但是,如果您也想重新縮放紋理,則不會改變紋理的大小,那么我建議您不要將其設置為絕對大小,例如15像素嘗試將其設置為屏幕大小的百分比。
或者,另一種有時更有效的方法是,以一定的尺寸(例如800 x 480)計算出正確的尺寸,然后計算出寬度增加的百分比,並將其應用於您的子畫面。例如:
@Override
public void resize(int width, int height){
super.resize(width, height);
camera.setToOrtho(false);
//The following is if the sprites are normally correct scaled
//for a screen size of 800 x 480, change to whatever you need
//They should both be floats and class variables
widthChange = width / 800;
heightChange = height / 480;
}
public void render() {
Gdx.gl.glClearColor(0.204f, 0.255f, 0.255f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
//Rather than using sprite.draw(batch), use:
batch.draw(sprite, sprite.x * widthChange, sprite.y * heightChange, sprite.width * widthChange, sprite.height * heightChange);
batch.end();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.