我正在使用Scene2d和Box2d使用LibGdx。
我使用Scene2D设计了2个舞台。一个阶段用于GUI,例如按钮,第二个阶段包含具有固定在我的Box2d对象坐标(在我的情况下是简单矩形)中的图像的Actor:

当我在PC上运行游戏时,我得到以下图像:
java - LibGdx Box2d和Scene2d上不同设备之间的缩放比例-LMLPHP

当我在Galaxy S9 +上运行它时,会收到以下图像:

java - LibGdx Box2d和Scene2d上不同设备之间的缩放比例-LMLPHP

如您所见,background和box2d对象在PC和Android上均可正确缩放。问题是,与Android(牛仔图像)相比,我的Actor图像在PC上已移位。
我对Box2D进行缩放以具有更好的物理效果,但是从那时起,我在跨平台缩放对象时遇到了麻烦。

码:

    //My base screen, other screens extend this one:
    public BaseScreen(){
    Box2D.init();

    mainStage = new Stage();
    uiStage = new Stage();

    manager = new AssetManager();

    debug= new Box2DDebugRenderer();

    world = new World(new Vector2(0,0),false);

    loadAssetmanager();

    //Box2d Sprites are initialzed in here:
    initialize();

    camera= new OrthographicCamera();
    camera.setToOrtho(false,1024,1024);

    debugMatrix= camera.combined.cpy();
    debugMatrix.scale(32,32,0);
    mainStage.getViewport().setCamera(camera);
    camera.update();

    //This BaseScreen class will initialize all assets from its subclasses here.

    setMultiplexer();

    }


背景:我是一名住院医师,使用Java自学。我正在尝试为我的医学生设计一个小型模拟,我希望他们能够在其PC,手机或平板电脑上使用它。
我需要基本的Box2D物理原理(每周工作40-70小时没有时间来编程自己的物理引擎),因此LibGdx和Box2d是我的理想框架。
任何输入将不胜感激。

最佳答案

我找到了解决方案。退后一天而不接触计算机后,我有了全新的视角。我重新阅读了有关视口的Wikipedia页面,终于明白了:https://github.com/libgdx/libgdx/wiki/Viewports

它是一个简单的。我初始化了mainStage(),但未将视口传递给它。因此LibGdx创建了自己的默认视口。当我查看LibGdx中Stage()类构造函数的源代码时,我发现默认的视口是设置为Gdx.graphics.getWidth(),Gdx.graphics.getHeight()的ScalingViewport,它读取每个设备的宽度/高度并以不同的方式缩放它:

    /** Creates a stage with a {@link ScalingViewport} set to {@link
        Scaling#stretch}. The stage will use its own {@link Batch}
    *   which will be disposed when the stage is disposed. */
 public Stage () {
    this(new ScalingViewport(Scaling.stretch, Gdx.graphics.getWidth(),
    Gdx.graphics.getHeight(), new OrthographicCamera()), new SpriteBatch());
    ownsBatch = true;
  }


因此,为解决此问题,我更改了以下代码,而不是:

mainStage = new Stage();


我将代码更改为,以便每个设备将缩放到相同的宽度/高度:

 mainStage = new Stage(new StretchViewport(1024,1024));


此更改基本上将视口设置为1024x1024像素,现在可以在我的PC上,Galaxy S9 + /其他设备上正确缩放。

关于java - LibGdx Box2d和Scene2d上不同设备之间的缩放比例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57927970/

10-12 19:59