我一直在为 OpenGL 练习编写一个 Minecraft 副本(我猜很多),但是在编写基本渲染 API 之后,我注意到真正的 Minecraft 使用了很多内存 - 大约 800MB!我可以完全理解为什么这是它必须记住的所有块以及生成器的生物和可能的地形数据......我问自己“这个块与那个块完全相同......它们可以在代码中吗? " 并且记得 C++ 有指针,所以我试图在 Java 中以我能想到的唯一方法做同样的事情,为每个块创建一个静态实例而不使用new
关键字,这是最好的方法吗?这似乎确实有帮助..如果可能的话,我仍然希望它变得更好?
这是有问题的课程..
public abstract class Block {
public static DirtBlock Dirt = new DirtBlock();
public static GrassBlock Grass = new GrassBlock();
public static RedstoneOreBlock RedstoneOre = new RedstoneOreBlock();
public static TNTBlock TNT = new TNTBlock();
public static MonsterSpawnerBlock Monserspawner = new MonsterSpawnerBlock();
public static BedrockBlock Bedrock = new BedrockBlock();
public static StoneBlock Stone = new StoneBlock();
public static GlassBlock Glass = new GlassBlock();
public static SandBlock Sand = new SandBlock();
public static WaterBlock Water = new WaterBlock();
public static SnowBlock Snow = new SnowBlock();
public static SnowGrassBlock SnowyGrass = new SnowGrassBlock();
public static IceBlock Ice = new IceBlock();
public static CoalBlock Coal = new CoalBlock();
对于 100 个块的世界,当前的内存使用量约为 200MB,每个块由 16 个块宽、64 个高和 16 个深组成,总共 1,638,400 个块 - 每个块约 128 个字节。