Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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的多图像分辨率_Libgdx - Fatal编程技术网

支持libgdx的多图像分辨率

支持libgdx的多图像分辨率,libgdx,Libgdx,我应该如何遵循目录结构以及指定什么,以便assetManger将该文件夹用于不同的分辨率 我已经研究了assetManager和ResolutionFileResolver,但直到现在我还不能准确地确定如何指定文件夹以支持不同的分辨率。如果使用图像管理器,就不需要处理不同的图像分辨率 假设您有一台尺寸为400x300的相机。然后在坐标(0,0)处绘制一个400x300大图像。然后,无论屏幕分辨率如何,图像都将缩放以填充屏幕。这在Android上非常好,在不同的设备上,屏幕分辨率可能会有很大差异,

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

我已经研究了
assetManager
ResolutionFileResolver
,但直到现在我还不能准确地确定如何指定文件夹以支持不同的分辨率。

如果使用图像管理器,就不需要处理不同的图像分辨率


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

更新:较新版本的Libgdx使用不同的策略来解析文件名(使用目录,而不是文件),所以这个答案不适用于(我想是0.9.2?)

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

以下是libGDX中的代码:

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


如果您想基于目录解析文件(因此“foo.jpg”将解析为“480x800/foo.jpg”或类似的内容),您可以编写一个新的解析器。只是执行。源代码可能是一个很好的起点。

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

首先选择一个最适合游戏的恒定分辨率。在这里,我已经采取了1280*720(景观)

类ScreenTest实现屏幕{
最终浮点appWidth=1280,screenWidth=Gdx.graphics.getWidth();
最终浮点appHeight=720,screenHeight=Gdx.graphics.getHeight();
正交摄影机;
喷雾批;
阶段性;
纹理img1;
图像img2;
公共屏幕测试(){
摄影机=新的正交摄影机();
camera.SetToOrTo(false、appWidth、appHeight);
批次=新的SpriteBatch();
batch.setProjectionMatrix(camera.combined);
img1=新纹理(“your_image1.png”);
img2=新图像(新纹理(“your_image2.png”);
img2.setPosition(0,0);//从(0,0)绘图
阶段=新阶段(新拉伸视口(appWidth、appHeight、camera));
stage.addActor(img2);
}
@凌驾
公共无效渲染(浮动增量){
batch.begin();
批次图(img,0,0);
batch.end();
舞台表演;
舞台表演(三角洲);
stage.draw();
//您还可以根据屏幕获得触摸输入。
if(Gdx.input.isTouched()){
System.out.println(“X”+Gdx.input.getX()*(appWidth/screenWidth));
System.out.println(“Y”+Gdx.input.getY()*(appHeight/screenHeight));
}
}
//
: 
:
//

}
谢谢您的帮助。。。。我再一次感到困惑。。bcoz我正在使用TexurePacker打包图像。。。不管我的决心是什么。。它会把它们都打包成相同的分辨率..是的。您要么需要TexturePacker生成不同的分辨率地图集(我不确定这是否是libGDX纹理打包器中的选项),要么将不同分辨率的纹理打包到单个地图集中(同样,我认为TexturePacker不会自动支持这一点)。我建议再问一个关于多分辨率图像和纹理地图集的问题。行为已经改变了。检查
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));
...