LibGDX:如何在Android游戏中优化资产处理?

时间:2014-01-10 13:01:17

标签: java android optimization libgdx assets

Assets{
       static Assets instance;
       AssetGamePlay play;
       class AssetGamePlay{
           AtlasRegion block2;
           -----code-----
       }
}

这是我班级的简化外观。

我正在通过Assets.instance.play.block2

调用变量block2

我在一秒钟内(渲染函数)大约40-60次调用许多这样的变量。

所以我的问题是(Android游戏):

  1. 这是一种非常昂贵的方式吗?如果是的话,我该如何改进?
  2. 我的班级流实际上是节省了一点RAM所以我实施了。

3 个答案:

答案 0 :(得分:0)

你不应该这样做,而是使用AssetManager代替,它已经以这种方式提供访问权限,但也提供更多功能。

我通常这样做:

public class YourGame {

    public static AssetManager assets = new AssetManager();

    // load all necessary assets via the manager in advance

    // use the manager like this anywhere in your code:
    YourGame.assets.get("block2", Texture.class);

}

答案 1 :(得分:0)

我没有看到在Assets中创建内部类的重点。你为什么不直接这样做,所以:

Assets.instance.play.block2;

成为这个:

Assets.instance.block2;

如果资产除以逻辑用途(播放,菜单等),则使用方法加载/卸载它们(使用Assetmanagernoone suggests)。

此外,如果您使用的是单例,您可能希望拥有一个获取实例的方法,如果它不存在,则创建它。

public static Assets getInstance(){
    if(instance==null) instance = new Assets();
    return instance;
}

所以你可以像这样使用它:

Assets.getInstance().block2;

无需担心静态实例因任何原因而丢失。

最后:

  

这是一种非常昂贵的方法吗?

Nop ,事实并非如此。我一直这样处理它。

答案 2 :(得分:-2)

如果这是Java,则outers类(Assets)只能访问内部(AssetGamePlay)的静态成员。 但是如果你有一个实例,并且内部的属性是公共的,你可以做一个getter方法,如:

Assets{
    static Assets instance;
    AssetGamePlay play;
    class AssetGamePlay{
        AtlasRegion block2;
        //-----code-----

    public AtlasRegion getBlock2(){
        return Assets.instance.play.block2;
    }
}