使用AnnotationAssetManager管理Libgdx中的资源

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/06/06/use-annotationassetmanager-in-libgdx/

Libgdx对于资源管理提供了AssetManager来做资源的管理,如果你需要使用它那么你就不得不使用这样的代码

manager.load("data/mytexture.png", Texture.class);
manager.load("data/myfont.fnt", BitmapFont.class);
manager.load("data/mymusic.ogg", Music.class);

其中的文件路径是字符串。然后在你使用的地方

Texture tex = manager.get("data/mytexture.png", Texture.class);
BitmapFont font = manager.get("data/myfont.fnt", BitmapFont.class);

这样使用其实蛮不方便的,如果你把文件路径作为一个全局变量的话,其实很多代码是重复的。

而AnnotationAssetManager提供了反射的方法来完成这个工作

package com.huangyunkun.hundred;

import com.badlogic.gdx.graphics.Texture;
import net.dermetfan.gdx.assets.AnnotationAssetManager;

public class Assets {
    @AnnotationAssetManager.Asset(Texture.class)
    public static final String ball = "ball.png";
}

比如有一个球的图片,那么只需要声明一个字符串。然后加载的时候直接传入这个类本身,由加载器自己去寻找所有需要加载的资源即可。

public class QuickStartScreen extends ScreenAdapter {
    private Stage stage;
    private AnnotationAssetManager annotationAssetManager;

    public QuickStartScreen() {
        this.annotationAssetManager = new AnnotationAssetManager();
        this.stage = new Stage(new StretchViewport(960, 480));
        this.annotationAssetManager.load(Assets.class);
        this.annotationAssetManager.finishLoading();
        this.stage.addActor(new Image(this.annotationAssetManager.get(Assets.ball, Texture.class)));
    }

    @Override
    public void render(float delta) {
        GdxUtilities.clearScreen();
        stage.draw();
    }
}

Asset类本身还可以根据需要拆成不同的小类。

而@Asset注解还支持参数,比如

@Asset(value = Texture.class, params = "textureParams")
public static final String grass = "img/grass.png";

 

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/06/06/use-annotationassetmanager-in-libgdx/

发表评论