我应该如何遵循目录结构以及指定的内容,以便assetManger
将该文件夹用于不同的分辨率。
我已经研究过assetManager
和ResolutionFileResolver
但直到现在我还无法确定如何指定文件夹以支持不同的分辨率。
答案 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上非常简洁,不同设备之间的屏幕分辨率可能会有很大差异,这样做就不用考虑了。