簡體   English   中英

LibGdx-ViewPort的寬度和高度與某些設備不匹配

[英]LibGdx-ViewPort width and height does not match for some devices

我正在為這樣的libGdx橫向游戲使用視口。

public static final int WORLD_WIDTH = 1280;
public static final int WORLD_HEIGHT = 800;

camera = new OrthographicCamera();
float aspectRatio = Constants.WORLD_WIDTH / Constants.WORLD_HEIGHT; 

ViewPort viewPort = new FillViewport(WORLD_WIDTH * aspectRatio,WORLD_HEIGHT, camera);

我正在使用此寬度和高度的所有位置。

在屏幕分辨率大於1300的設備上,該設備在所有設備上均能正常工作。在屏幕分辨率大於1300的設備上,僅游戲的中間部分可見。我嘗試將拉伸視口用於分辨率更高的設備,但它給出了所有游戲元素都伸展了。

如何使游戲在所有設備上都能正常運行?是否需要更改視口?

我建議使用ExtendViewprot ,因為它通過向一個方向擴展世界來保持世界長寬比而不會出現黑條。 根據世界的寬度和高度使用所有位置,而不是屏幕的寬度和高度,並根據設備的寬度和高度以調整大小方法調整視口大小。

您的資源大小應考慮到世界的寬度和高度。

public class MyGdxGame extends ApplicationAdapter {

    Stage stage;
    public static final int WORLD_WIDTH = 800;
    public static final int WORLD_HEIGHT = 480;

    @Override
    public void create() {

        ExtendViewport extendViewport=new ExtendViewport(WORLD_WIDTH,WORLD_HEIGHT);
        stage=new Stage(extendViewport);

        //logical pixels of your current device, device specific
        //float w=Gdx.graphics.getWidth(); //screen width
        //float h=Gdx.graphics.getHeight();// screen height

        Image image=new Image(new Texture("badlogic.jpg"));
        image.setPosition(WORLD_WIDTH/2,WORLD_HEIGHT/2, Align.center);  //consider world width and height instead of screen width and height

        stage.addActor(image);
        stage.setDebugAll(true);
    }

    @Override
    public void render() {

        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        Gdx.gl.glClearColor(0,0,0,1);

        stage.act();
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {

        stage.getViewport().update(width,height);
        stage.getCamera().position.set(WORLD_WIDTH/2,WORLD_HEIGHT/2,0);
        stage.getCamera().update();
    }

    @Override
    public void dispose() {
        stage.dispose();
    }
}

終於我使它工作了。 我不確定這是否是解決此類問題的正確方法。 我是這樣做的;

    camera = new OrthographicCamera();
    if(screenHeight>1300)
    {

        Constants.WORLD_WIDTH=1280;
        Constants.WORLD_HEIGHT=960;

    }
    else{
        Constants.WORLD_WIDTH=1280;
        Constants.WORLD_HEIGHT=800;

    }
     viewPort = new FillViewport(Constants.WORLD_WIDTH, Constants.WORLD_HEIGHT, camera);
     viewPort.apply();

我為所有較高分辨率的設備使用了1280x960的viewPort寬度,同時為屏幕寬度小於1300的所有其他設備保持1280x800的分辨率。在繪制背景時,我使用了視口的寬度和高度來設置尺寸。

bgSprite=new Sprite(bgTexture);
    bgSprite.setPosition(Constants.BG_X,Constants.BG_Y);
bgSprite.setSize(game.viewPort.getWorldWidth(),game.viewPort.getWorldHeight());

不知道這是正確的方法,但是這樣做解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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