Libgdx 存储角色信息的最佳方式

Libgdx 存储角色信息的最佳方式,libgdx,Libgdx,我正在创建一个简单的2D游戏。我有玩家角色和每个关卡产生的敌人。每个关卡都有自己的一组敌人,数量为1-6。玩家角色可以升级到不同的等级-这意味着每个等级都有自己的纹理。 存储玩家角色(玩家纹理、属性)数据的最佳方式是什么 如何告诉游戏如何定位敌人(不同数量的敌人有不同的布局) 我读过关于JSON的文章,但如果你有大量的数据(我不确定我的案例是否在这种情况下很慢),那么显然它会变慢。在我的例子中,大约有30种不同的玩家路径和更多不同的敌人位置 要存储纹理、声音、平铺贴图、字体等,请使用类。它实时加

我正在创建一个简单的2D游戏。我有玩家角色和每个关卡产生的敌人。每个关卡都有自己的一组敌人,数量为1-6。玩家角色可以升级到不同的等级-这意味着每个等级都有自己的纹理。 存储玩家角色(玩家纹理、属性)数据的最佳方式是什么 如何告诉游戏如何定位敌人(不同数量的敌人有不同的布局)


我读过关于JSON的文章,但如果你有大量的数据(我不确定我的案例是否在这种情况下很慢),那么显然它会变慢。在我的例子中,大约有30种不同的玩家路径和更多不同的敌人位置

要存储纹理、声音、平铺贴图、字体等,请使用类。它实时加载纹理和其他资源(不丢失FPS)。如果不再需要资源,您还可以
卸载它们。并在需要时再次加载

JSON并没有你描述的那么慢。仅存储每个实体唯一的数据。例如僵尸敌人:

{
"zombie" {"x": 100, "y": 10},
"zombie" {"x": 100, "y": 20},
}
其他数据可以在类中声明

class Zombie {

   int width;
   int height;
   Texture texture;

   int x; // initialize later, when load from JSON
   int y;

   public Zombie(Texture texture, int width, int, height){
       this.texture = texture;
       this.width = width;
       this.height = height;
   }

}我正在使用Preferences类。这很容易,也很方便。要保存播放器的当前纹理,不需要存储纹理本身。可以保存纹理索引或其名称:

Preferences progress;
...
progress.putInteger("playerTextureIndex ", 0); // for save
playerTextureIndex = progress.getInteger("playerTextureIndex ", 0); // for load

然后启动适当的纹理。

对于敌人的定位,我想在平铺贴图(.tmx)中定义位置。在编辑器中,我只是创建一个简单的矩形来标记位置

在代码中,我获取所有
贴图对象
,并将其分配给Box2D实体和装置。我通常会编辑宽度和高度,因为在瓷砖中,精灵的大小不太常见

然后在
Sprite
类的构造函数中,我接受一个Box2D体

对于资产,加载和存储它们的最佳方法是使用
AssetManager
。它以非常快的速度加载所有资产,是一个比不加载资产要好得多的解决方案


我希望这个答案对你有所帮助,如果你还有任何问题,请在下面发表评论

你所说的“玩家路径”是什么意思?你不应该有一个数组,其中有数千对X,Y来描述某个角色的每一个动作。相反,您应该存储一些关键位置并在它们之间插入移动。谢谢您,据我所知,该编辑器可能会解决我的问题:)不客气!是的,我个人认为这个解决方案是解决这个问题最干净、也是我最喜欢的方法。平铺贴图也是2D平铺贴图最流行的格式,几乎所有游戏引擎都支持这种格式。