Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
Java Libgdx使用具有高分辨率和低分辨率纹理的AssetManager_Java_Android_Textures_Libgdx_Android Assets - Fatal编程技术网

Java Libgdx使用具有高分辨率和低分辨率纹理的AssetManager

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

我使用libgdx中的AssetManager和Atlas文件加载所有纹理。这工作得很好,但是我想修改我必须使用不同纹理合并的代码

例如,当完全缩小时,我不需要漂亮的高分辨率纹理。一个小的像素点就足够了。放大时,我希望使用适当的高分辨率纹理

目前我有:

main render()方法:

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");
    }
}   
}
(您可以暂时忽略double
ballsall.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)在我看来没有任何好处?你的意思是,如果缩小,当你将高分辨率纹理与低分辨率纹理交换时,是否有任何性能提升?我真的不认为它会加速。最好设置最适合的修剪和缩小过滤器。看看这个: