Java Libgdx使用具有高分辨率和低分辨率纹理的AssetManager
我使用libgdx中的AssetManager和Atlas文件加载所有纹理。这工作得很好,但是我想修改我必须使用不同纹理合并的代码 例如,当完全缩小时,我不需要漂亮的高分辨率纹理。一个小的像素点就足够了。放大时,我希望使用适当的高分辨率纹理 目前我有: main render()方法:Java Libgdx使用具有高分辨率和低分辨率纹理的AssetManager,java,android,textures,libgdx,android-assets,Java,Android,Textures,Libgdx,Android Assets,我使用libgdx中的AssetManager和Atlas文件加载所有纹理。这工作得很好,但是我想修改我必须使用不同纹理合并的代码 例如,当完全缩小时,我不需要漂亮的高分辨率纹理。一个小的像素点就足够了。放大时,我希望使用适当的高分辨率纹理 目前我有: main render()方法: batch.draw(Assets.instance.ballsmall.ballsmall, this.x, this.y); public class Assets implements Disposabl
batch.draw(Assets.instance.ballsmall.ballsmall, this.x, this.y);
public class Assets implements Disposable {
private AssetManager _assetManager;
public BallSmall ballsmall;
public static final Assets instance = new Assets();
private Assets() {}
public void init(AssetManager assetManager)
{
_assetManager = assetManager;
_assetManager.load("output/Game.atlas", TextureAtlas.class);
_assetManager.finishLoading();
TextureAtlas atlas = _assetManager.get("output/Game.atlas");
for (Texture t : atlas.getTextures())
{
t.setFilter(TextureFilter.Linear, TextureFilter.Linear);
}
ballsmall = new BallSmall(atlas);
}
@Override
public void dispose() {
_assetManager.dispose();
}
public class BallSmall {
public final AtlasRegion ballsmall;
public BallSmall(TextureAtlas atlas) {
ballsmall = atlas.findRegion("ballsmall");
}
}
}
(您可以暂时忽略doubleballsall.ballsall
。这只是我的资产对象结构的一个较小的语义问题。)
资产管理器部分:
batch.draw(Assets.instance.ballsmall.ballsmall, this.x, this.y);
public class Assets implements Disposable {
private AssetManager _assetManager;
public BallSmall ballsmall;
public static final Assets instance = new Assets();
private Assets() {}
public void init(AssetManager assetManager)
{
_assetManager = assetManager;
_assetManager.load("output/Game.atlas", TextureAtlas.class);
_assetManager.finishLoading();
TextureAtlas atlas = _assetManager.get("output/Game.atlas");
for (Texture t : atlas.getTextures())
{
t.setFilter(TextureFilter.Linear, TextureFilter.Linear);
}
ballsmall = new BallSmall(atlas);
}
@Override
public void dispose() {
_assetManager.dispose();
}
public class BallSmall {
public final AtlasRegion ballsmall;
public BallSmall(TextureAtlas atlas) {
ballsmall = atlas.findRegion("ballsmall");
}
}
}
我想保持main
render()
方法像这样简单,调用Assets.instance
,并可能将全局缩放级别作为参数传入。但是,AssetManager随后必须使用此缩放级别来确定要交换的纹理。非常感谢。加载纹理
s,高分辨率和低分辨率,并编写一个getter:getballsall(float zoom){if(zoom>low_resu zoom)return _assetManager.get(“HighResTexture”);else返回_assetManger.get(“LowResTexture”)}
是的,实际上相当简单。谢谢但是,直到程序再次聚焦,或者我正在逐步调试调试器,纹理才会交换。实际上,这可能值得作为一个单独的问题来讨论,但是如果完全缩小,交换纹理是否有任何性能优势?使用不同于atlas的图像,如果相同的尺寸(比如64x64 8bit PNG)在我看来没有任何好处?你的意思是,如果缩小,当你将高分辨率纹理与低分辨率纹理交换时,是否有任何性能提升?我真的不认为它会加速。最好设置最适合的修剪和缩小过滤器。看看这个: