我应该如何遵循目录结构以及指定的内容,以便assetManger
将该文件夹用于不同的分辨率。
我研究过assetManager
,ResolutionFileResolver
但直到现在我还不能完全弄清楚如何指定文件夹来支持不同的分辨率。
我应该如何遵循目录结构以及指定的内容,以便assetManger
将该文件夹用于不同的分辨率。
我研究过assetManager
,ResolutionFileResolver
但直到现在我还不能完全弄清楚如何指定文件夹来支持不同的分辨率。
更新:较新版本的 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源代码可能是一个不错的起点。
曾经我也遇到过这个问题,但最后我得到了可行的解决方案,用于在 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));
}
}
//
:
:
//
}
以任何类型的分辨率运行此代码,它将以该分辨率进行调整而不会受到任何干扰。
如果您使用OrthographicCamera,则无需处理不同的图像分辨率。
假设您有一台尺寸为 400x300 的相机。然后在坐标 (0,0) 处绘制一个 400x300 的大图像。然后,无论屏幕分辨率如何,图像都会被缩放以填满屏幕。这在 Android 上真的很简洁,不同设备之间的屏幕分辨率可能会有很大差异,这样做你不必考虑它。