簡體   English   中英

在Android上使用libgdx進行縮放

[英]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

您可以在此處找到一些屏幕截圖和代碼段以及所有需要了解的內容。

基本上,您將必須決定某種策略(您的問題聽起來像您在ScreenViewportStretchViewport都很有趣),然后再由它來管理您的相機。

我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM