Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设备旋转后,LibGDX应用程序在iOS上呈现不正确_Ios_Libgdx - Fatal编程技术网

设备旋转后,LibGDX应用程序在iOS上呈现不正确

设备旋转后,LibGDX应用程序在iOS上呈现不正确,ios,libgdx,Ios,Libgdx,我有一个简单的GDX应用程序-除了游戏代码外,完全是样板: public class MyGdxGame extends ApplicationAdapter { int width = 0, height = 0; ShapeRenderer sr; @Override public void create() { super.create(); sr = new ShapeRenderer(); } @Ove

我有一个简单的GDX应用程序-除了游戏代码外,完全是样板:

public class MyGdxGame extends ApplicationAdapter {
    int width = 0, height = 0;
    ShapeRenderer sr;

    @Override
    public void create() {
        super.create();
        sr = new ShapeRenderer();
    }

    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(0.6f, 0.1f, 0.1f, 1f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        sr.begin(ShapeRenderer.ShapeType.Filled);
        sr.setColor(Color.YELLOW);
        sr.rect(width/4f, height/4f, width/2f, height/2f);
        sr.end();
    }
    
    @Override
    public void dispose () {
        sr.dispose();
    }
}
在安卓系统上,这一点与预期一样,当设备在横向和纵向之间旋转时,生成的图像保持不变

在iOS上,当应用程序启动时,显示是正确的,但如果随后将其旋转90度,则图像会被错误地重新绘制。下图显示了从纵向开始与从横向开始然后旋转到纵向之间的区别

在我看来,在iOS上的
render()
函数中,GDX后端似乎不知道纵横比发生了变化,但我不知道如何解决这个问题,也不知道为什么它应该在一个平台上正常工作,而在另一个平台上却不能

我已经用GDX 1.9.5和1.10.0进行了测试,没有任何差异

  • 这似乎是一个错误
  • 可以通过将
    resize()
    函数更新为:
  • Android后端似乎会在屏幕大小更改后隐式调整
    glViewport
    ,而iOS后端则不会

        public void resize(int width, int height) {
            super.resize(width, height);
            HdpiUtils.glViewport(0, 0, width, height);
            this.width = width;
            this.height = height;
        }