我正在创建一个简单的2D游戏。我有玩家角色和敌人产生每个级别。每个级别都有自己的一组敌人,数量为1-6。玩家角色可以升级到各种类 - 意味着每个类都有自己的纹理。 存储玩家角色数据的最佳方式是什么(玩家纹理,属性) 如何告诉游戏如何定位敌人(不同数量的敌人的不同布局)
我读到了关于JSON的内容,但是如果你有大量的数据显然它会变慢(我不确定我的情况是否很慢)。在我的情况下,大约有30种不同的玩家路径和许多不同的敌人位置。
答案 0 :(得分:1)
存储纹理,声音,平铺地图,字体等。使用AssetManager类。它可以实时加载纹理和其他资源(不会丢失FPS)。如果不再需要,您还可以unload
资源。当有需要时,再次load
。
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;
}
}
答案 1 :(得分:0)
我正在使用Preferences类。它非常简单方便。要保存播放器的当前纹理,您不需要存储纹理本身。您可以保存纹理索引或其名称:
Preferences progress;
...
progress.putInteger("playerTextureIndex ", 0); // for save
playerTextureIndex = progress.getInteger("playerTextureIndex ", 0); // for load
然后启动适当的纹理。
答案 2 :(得分:0)
对于敌人的定位,我喜欢在Tiled Maps(.tmx)中定义位置。在编辑器中,我只需创建一个简单的矩形来标记位置。
在代码中然后我得到所有MapObjects
并将它们分配给Box2D主体和灯具。我通常会编辑宽度和高度,因为精灵的尺寸在瓷砖中非常完美并不常见。
然后在Sprite
类的构造函数中,我接收了一个Box2D体。
对于资产,加载和存储它们的最佳方法是使用AssetManager
。它可以在非常快的时间内加载所有资产,并且比没有它时加载它们更好。
我希望这个答案对您有所帮助,如果您有任何其他问题,请在下面发表评论!