0

我尽我所能,但我的 libgdx 应用程序不会在 android 2.2 上缩减。它在仅 480x320 的屏幕上显示 640x480 的完整图像。这是我到目前为止得到的代码;

private static final int VIRTUAL_WIDTH = 640;
private static final int VIRTUAL_HEIGHT = 480;
private static final float ASPECT_RATIO = (float)VIRTUAL_WIDTH/(float)VIRTUAL_HEIGHT;

public static Texture BMP_BACKGROUND;

public static Rectangle viewport;
public static OrthographicCamera camera;
public static SpriteBatch batch;

public void create()
{
  float w = Gdx.graphics.getWidth();
  float h = Gdx.graphics.getHeight();

  BMP_BACKGROUND = new Texture(Gdx.files.internal("data/bmpSpaceBackground.png"));
  BMP_BACKGROUND.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);

  batch = new SpriteBatch();
  camera = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
}

@Override
public void dispose()
{
  batch.dispose();
  BMP_BACKGROUND.dispose();
}

@Override
public void render()
{
  camera.update();
  camera.apply(Gdx.gl10);

  // set viewport
  Gdx.gl.glViewport((int) viewport.x, (int) viewport.y,
                    (int) viewport.width, (int) viewport.height);

  Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

  batch.draw(BMP_BACKGROUND, 0, 0);

  Game.run();
}

public void resize(int width, int height)
{
  float aspectRatio = (float)width/(float)height;
  float scale = 1f;
  Vector2 crop = new Vector2(0f, 0f);
  if(aspectRatio > ASPECT_RATIO)
  {
      scale = (float)height/(float)VIRTUAL_HEIGHT;
      crop.x = (width - VIRTUAL_WIDTH*scale)/2f;
  }
  else if(aspectRatio < ASPECT_RATIO)
  {
      scale = (float)width/(float)VIRTUAL_WIDTH;
      crop.y = (height - VIRTUAL_HEIGHT*scale)/2f;
  }
  else
  {
      scale = (float)width/(float)VIRTUAL_WIDTH;
  }

  float w = (float)VIRTUAL_WIDTH*scale;
  float h = (float)VIRTUAL_HEIGHT*scale;
  viewport = new Rectangle((int)crop.x, (int)crop.y, (int)w, (int)h);
}

谁能告诉我我做错了什么?

4

1 回答 1

2

尝试这个

public void resize(int width, int height)
{
        cam.viewportHeight = height; //set the viewport
        cam.viewportWidth = width; 
        if (Config.VIRTUAL_VIEW_WIDTH / cam.viewportWidth < Config.VIRTUAL_VIEW_HEIGHT
                / cam.viewportHeight) {
//sett the right zoom direct
            cam.zoom = Config.VIRTUAL_VIEW_HEIGHT / cam.viewportHeight;
        } else {
//sett the right zoom direct
            cam.zoom = Config.VIRTUAL_VIEW_WIDTH / cam.viewportWidth;
        }
        cam.update(); 
}

这确实有效,我可以使用虚拟分辨率。但是不要忘记设置您正在使用的舞台的相机!否则没有任何作用!
stage.setCamera(camera).
如果你这样做了,你可以在你的舞台内使用虚拟分辨率。
关于
您的代码是来自在线示例的 1:1。

于 2013-05-23T07:34:47.083 回答