支持libgdx的多图像分辨率

时间:2013-02-03 15:52:32

标签: libgdx

我应该如何遵循目录结构以及指定的内容,以便assetManger将该文件夹用于不同的分辨率。

我已经研究过assetManagerResolutionFileResolver但直到现在我还无法确定如何指定文件夹以支持不同的分辨率。

3 个答案:

答案 0 :(得分:4)

更新:较新版本的Libgdx使用不同的策略来解析文件名(包含目录,而不是文件),所以这个答案不适用于更新的Libgdx版本(0.9.2,我认为? https://github.com/libgdx/libgdx/commit/3afcfe49c40196765033a90b4610159183dde981

内置ResolutionFileResolver不使用目录层次结构。它使用文件后缀将屏幕分辨率与资产匹配。

以下是libGDX AssetManagerTest的代码:

Resolution[] resolutions = { new Resolution(320, 480, ".320480"),
                             new Resolution(480, 800, ".480800"),
                             new Resolution(480, 856, ".480854") };
ResolutionFileResolver resolver = new ResolutionFileResolver(new InternalFileHandleResolver(), resolutions);
AssetManager manager = new AssetManager();
manager.setLoader(Texture.class, new TextureLoader(resolver));
...

解析器根据当前屏幕分辨率附加其中一个后缀。因此,例如,如果您在480x800设备上查找“foo.jpg”,将打开文件“foo.jpg.480800”。

如果你想根据目录解析文件(所以“foo.jpg”将解析为“480x800 / foo.jpg”或类似的东西),你可以写一个新的解析器。只需实施FileHandleResolver即可。 ResolutionFileResolver.java来源可能是一个很好的起点。

答案 1 :(得分:2)

一旦我也遇到了这个问题,但最后我得到了工作解决方案,用于在libgdx中使用SpriteBatch或Stage绘制任何东西。使用正交相机,我们可以做到这一点。

首先选择一个最适合游戏的恒定分辨率。在这里,我拍摄了1280 * 720(风景)。



class ScreenTest implements Screen{
 
final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();

OrthographicCamera camera;

SpriteBatch batch;
Stage stage;

Texture img1;
Image img2;

 public ScreenTest(){
  		camera = new OrthographicCamera();
		camera.setToOrtho(false, appWidth, appHeight);
 		
        batch = new SpriteBatch();
 		batch.setProjectionMatrix(camera.combined);
  			
        img1 = new Texture("your_image1.png");
 		img2 = new Image(new Texture("your_image2.png"));
 		img2.setPosition(0, 0); // drawing from (0,0)
 	
        stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
        stage.addActor(img2);
  }
    
    @Override
	public void render(float delta) {
	    batch.begin();
		batch.draw(img, 0, 0);
		batch.end();

		stage.act();
		stage.act(delta);
		stage.draw();
		
		// Also You can get touch input according to your Screen.
		
		if (Gdx.input.isTouched()) {
		 System.out.println(" X " + Gdx.input.getX() * (appWidth / screenWidth));
		 System.out.println(" Y " + Gdx.input.getY() * (appHeight / screenHeight));
	   }
	   
	}
  //
  : 
  :
  //
}




以任何类型的分辨率运行此代码,它将在该分辨率下进行调整而不会受到任何干扰。

答案 2 :(得分:0)

如果您使用OrthographicCamera,则无需处理不同的图像分辨率。

假设您的相机尺寸为400x300。然后在坐标(0,0)处绘制一个400x300的大图像。然后,无论屏幕分辨率如何,图像都将缩放以填充屏幕。这在Android上非常简洁,不同设备之间的屏幕分辨率可能会有很大差异,这样做就不用考虑了。